mysql insert文の操作例の説明
3867 ワード
Insertの構文
カラム構成表とVALES構成表が空の場合、INSERTはローを作成し、各カラムがデフォルト値に設定されます.
workerテーブルにnameとemailしかないと仮定し、データを挿入します.
複数のデータを一括挿入
値を割り当てる列を指定し、値の挿入データをリストします.
setを使用してデータを挿入する
SET句に名前が付けられていない行にはデフォルト値が与えられ、この形式のINSERT文では複数の行を挿入できません.
1つのexpressionは、値テーブルで以前に設定されたカラムを参照できます.たとえば、次のようにします.
INSERT…SELECT文を使用して他のテーブルから選択した行を挿入
クエリは、ORDER BYの句を1つ含むことができず、INSERT文の宛先表は、SELECTクエリの部分のFROM句には現れない.
ON DUPLICATE KEY UPDATE
ON DUPLICATE KEY UPDATEを指定し、行を挿入するとUNIQEインデックスまたはPRIMARY KEYに重複する値が表示される場合は、古い行UPDATEを実行します.
INSERT INTO...SELECTのON DUPLICATE KEY UPDATE
INSERT DELAYED
このオプションは、クライアントがINSERTの完了を待つことができない場合に便利です.クライアントがINSERT DELAYEDを使用すると、すぐにサーバから決定されます.テーブルが他のスレッドで使用されていない場合、ローが挿入されます.
INSERT DELAYEDを使用するもう一つの重要な利点は、多くのクライアントからの挿入が集約され、ブロックに記述されることである.これは、多くの独立した挿入を実行するよりもずっと速いです.
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は、プライマリ・サーバとは異なるデータをセカンダリ・サーバで生成しないため、セカンダリ・レプリケーション・サーバでは無視されます.
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は、プライマリ・サーバとは異なるデータをセカンダリ・サーバで生成しないため、セカンダリ・レプリケーション・サーバでは無視されます.