mysql insertのいくつかの操作(DELAYED、IGNORE、ON DUPLICATE KEY UPDATE)

7731 ワード


INSERT構文
INSERT [LOW_PRIORITY |DELAYED| HIGH_PRIORITY] [IGNORE]
       [INTO]tbl_name[(col_name,...)]
       VALUES ({expr| DEFAULT},...),(...),...
       [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]

または、
INSERT [LOW_PRIORITY |DELAYED| HIGH_PRIORITY] [IGNORE]
       [INTO]tbl_name
       SETcol_name={expr| DEFAULT}, ...
       [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]

または、
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
       [INTO]tbl_name[(col_name,...)]
       SELECT ...
       [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]

 
 
 
MySQLレコードが存在しない場合に挿入し、レコードが存在する場合に更新する
MySQLレコードが存在しない場合に挿入され、レコードが存在する場合にネットワークを更新するには基本的に3つの解決方法がある.
1つ目:
例1:複数のレコードを挿入する
クライアントというプライマリ・キーがあると仮定します.idのclientsテーブルでは、次の文を使用できます.
INSERTINTOclients
(client_id,client_name,client_type)
SELECTsupplier_id,supplier_name,'advertising'
FROMsuppliers
WHEREnotexists(select*fromclients
whereclients.client_id=suppliers.supplier_id);
例1:単一レコードの挿入
INSERTINTOclients
(client_id,client_name,client_type)
SELECT10345,'IBM','advertising'
FROMdual
WHEREnotexists(select*fromclients
whereclients.client_id=10345);
テーブル名にdualを使用すると、select文の後に現在のテーブルに値が存在しなくても、挿入するフィールドの値に直接追いつくことができます.
2つ目:
INSERTでON DUPLICATE KEY UPDATEの使用

ON DUPLICATE KEY UPDATE, UNIQUE PRIMARY KEY , UPDATE。 , a UNIQUE, 1, :

mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)
      ->ON DUPLICATE KEY UPDATE c=c+1;
mysql>UPDATE table SET c=c+1 WHERE a=1;
が しいレコードとして されると、 を ける の は1になります. のレコードが されると、 を けるローの は2になります.
: bが の である 、INSERTはこのUPDATE に します.
mysql>UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
a=1 OR b=2が の に する 、 されるのは1つの のみである. 、 のキーワードが あるテーブルに してON DUPLICATE KEY を しないようにしてください.
UPDATE でVALES(col_name) #カンスウ#を してINSERTから...UPDATE のINSERT はカラム を します.すなわち、 キーワード が しない 、UPDATE のVALES(col_name)は、 されたcol_を することができるnameの .この は、 の に に しています.VALES() はINSERTのみ...UPDATE に があり、 の はNULLを します.
:
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
      ->ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
この は、 の2つの と じ を たします.
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)
      ->ON DUPLICATE KEY UPDATE c=3;
mysql>INSERT INTO table (a,b,c) VALUES (4,5,6)
      ->ON DUPLICATE KEY UPDATE c=9;
ON DUPLICATE KEY UPDATEを する 、DELAYEDオプションは されます.
 
3つ :
REPLACE
 
データベース#データベース#を すると、このような によく する があります.テーブルがフィールドに のインデックスを した 、 のキー を してレコードを すると、プライマリ・キーの エラーが されます.もちろん、 しいレコードの で のレコード を きしたいかもしれません. の では、DELETE を して のレコードを してからINSERTを して しいレコードを する があります.MySQLでは、REPLACE という しいソリューションを しています.REPLACEを して1つのレコードを する 、 しない 、REPLACEはINSERTの と に、 したレコードがある 、REPLACEは しいレコードの を して のレコード を き えます.REPLACEを する の は、DELETEとINSERTを1つに して を できることです.これにより、DELETEとINSERTを に する にトランザクションを するなどの な を する がなくなります.REPLACEを する 、テーブルに のインデックスが であり、そのインデックスが するフィールドに の を できません.そうしないと、REPLACEはINSERTと く じです.REPLACEを した 、システムは する を して、もし1を すならば、 の で する がないことを して、もし2を すならば、1 の する があることを して、システムは に にDELETEを び してこの を して、それから はINSERTでこの を します.2より きい を すと、 の のインデックスがあり、 のレコードが され、 されていることを します.REPLACEの はINSERTと に ています. えば、 のREPLACE はレコードを または します.REPLACE INTO users(id,name,age)VALES(123,' ',50); のレコードを :REPLACE INTO users(id,name,age)VALES(123,' ',50),(134,'Mary',15);REPLACEは、SET REPLACE INTO users SET id=123、name=' '、age=50を することもできます. したREPLACEは、テーブルに1つ の のインデックスがあるため、3つ のレコードに を ぼす があります.この 、REPLACEは のインデックスを し、 インデックスに する レコードを し、この しいレコードを します.table 1テーブルが3つのフィールドa,b,cがあると する.ユニークなインデックスがあります.  CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE);table 1に に3つのレコードa b c 1 1 1 1 2 2 3 3があると します. に、REPLACE を してtable 1にレコードを します.  REPLACE INTO table1(a, b, c) VALUES(1,2,3); された は のようにQuery OK,4 rows affected(0.00 sec)table 1には のようにa b c 1 2 3が されており,REPLACEは の3つの をすべて し,(1,2,3)を していることがわかる.
        ,          (    ),                 。            : 1)insert      ,        。REPLACE      ,              。 2)              (               ),     2   2      (          ),  insert                ,REPLACE        ,       。         ,    ,    。


http://blog.csdn.net/kesaihao862/article/details/6718443

http://www.w2blog.net/view/513.html