ホームページ >データベース >mysql チュートリアル >mysql での挿入操作を解析する
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, ... ]
列リストと VALUES リストが両方とも空のリストの場合、INSERT は各列がデフォルト値に設定された行を作成します:
INSERT INTO tbl_name () VALUES();
ワーカー テーブルには名前とメールアドレス、データを挿入
insert into worker values(“tom”,”tom@yahoo.com”);
複数のデータを一括で挿入
insert into worker values(‘tom','tom@yahoo.com'),(‘paul','paul@yahoo.com');
値を割り当てる列を与え、その値をリストするデータを挿入
insert into worker (name) values (‘tom'); insert into worker (name) values (‘tom'), (‘paul');
セットを使用するデータを挿入するには
insert into worker set name='tom';
SET 句内の名前のない行にはデフォルト値が割り当てられます。この形式の INSERT ステートメントを使用して複数の行を挿入することはできません。
式では、値テーブルに以前に設定された列を 参照できます。例:
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 句を含めることはできません、および INSERT ステートメントの宛先テーブルは FROM 句.
ON DUPLICATE KEY UPDATE
を SELECT クエリ部分に指定すると、行を挿入すると UNIQUE になります。 Index または 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の完了を待てない場合、クライアントがWhen INSERT DELAYEDを使用する場合、このオプションは非常に便利です。入力すると、サーバーからすぐに確認が得られます。そして、行は queue にエンキューされ、テーブルが 他の スレッドによって使用されていないときに、行が挿入されます。 INSERT DELAYED を使用するもう 1 つの重要な利点は、多くのクライアントからの挿入が一緒にプールされ、1 つのブロックに書き込まれることです。これは、多数の独立した挿入を実行するよりもはるかに高速です。
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 は、スレーブ レプリケーション サーバーでは無視されます。DELAYED は、マスター サーバーとは異なるデータをスレーブ サーバーに生成しないためです。
以上がmysql での挿入操作を解析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。