mysql insert文の操作例の説明

3867 ワード

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

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]


カラム構成表とVALES構成表が空の場合、INSERTはローを作成し、各カラムがデフォルト値に設定されます.
 
  
INSERT INTO tbl_name () VALUES();

workerテーブルにnameとemailしかないと仮定し、データを挿入します.
 
  
insert into worker values(“tom”,”[email protected]”);

複数のデータを一括挿入
 
  
insert into worker values(‘tom','[email protected]'),(‘paul','[email protected]');

値を割り当てる列を指定し、値の挿入データをリストします.
 
  
insert into worker (name) values (‘tom');
insert into worker (name) values (‘tom'), (‘paul');

setを使用してデータを挿入する
 
  
insert into worker set name='tom';

SET句に名前が付けられていない行にはデフォルト値が与えられ、この形式のINSERT文では複数の行を挿入できません.
1つのexpressionは、値テーブルで以前に設定されたカラムを参照できます.たとえば、次のようにします.
 
  
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
--
INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);

INSERT…SELECT文を使用して他のテーブルから選択した行を挿入
 
  
insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;
--
insert into tbl_name1 select col3,col4 from tbl_name2;

クエリは、ORDER BYの句を1つ含むことができず、INSERT文の宛先表は、SELECTクエリの部分のFROM句には現れない.
 ON DUPLICATE KEY UPDATE
ON DUPLICATE KEY UPDATEを指定し、行を挿入するとUNIQEインデックスまたはPRIMARY KEYに重複する値が表示される場合は、古い行UPDATEを実行します.
 
  
-- a,b , table 1,2 , , c
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3;
--
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=values(c);
--
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
  NOT NULL NULL。 INSERT INSERT INTO...SELECT , , 。 , 0; , (''); , “zero” 。

INSERT INTO...SELECTのON DUPLICATE KEY UPDATE
 
  
insert into tbl_name1(a,b,c)
  select col1,col2,col3 from tbl_name2
ON DUPLICATE KEY UPDATE c=values(c);

INSERT DELAYED
このオプションは、クライアントがINSERTの完了を待つことができない場合に便利です.クライアントがINSERT DELAYEDを使用すると、すぐにサーバから決定されます.テーブルが他のスレッドで使用されていない場合、ローが挿入されます.
INSERT DELAYEDを使用するもう一つの重要な利点は、多くのクライアントからの挿入が集約され、ブロックに記述されることである.これは、多くの独立した挿入を実行するよりもずっと速いです.
 
  
INSERT DELAYED INTO worker (name) values (‘tom'), (‘paul');

DELAYEDを使用する場合、いくつかの制限があります.
1.INSERT DELAYEDは、MyISAM、MEMORY、ARCHIVEテーブルにのみ適用されます.MyISAMテーブルでは、データファイルの間に空きブロックがない場合は、SELECTとINSERT文の併用がサポートされます.これらの場合、MyISAMにINSERT DELAYEDを使用する必要はほとんどありません.
2.INSERT DELAYEDは、値リストを指定するINSERT文にのみ使用する必要があります.サーバ無視INSERT DELAYED...SELECT文のDELAYEDとINSERT DELAYED...ON DUPLICATE UPDATE文のDELAYED.
3.行が挿入される前に、文はすぐに返されるので、LAST_を使用することはできません.INSERT_ID()でAUTO_を取得INCREMENT値.AUTO_INCREMENT値は文によって生成される場合があります.
4.SELECT文では、これらの行が確実に挿入されるまで、DELAYED行は表示されません.
5.DELAYEDは、プライマリ・サーバとは異なるデータをセカンダリ・サーバで生成しないため、セカンダリ・レプリケーション・サーバでは無視されます.