insert的語(yǔ)法
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會(huì)創(chuàng)建一個(gè)行,每個(gè)列都被設(shè)置為默認(rèn)值:
INSERT INTO tbl_name () VALUES();
假設(shè)worker表只有name和email,插入一條數(shù)據(jù)
insert into worker values(“tom”,”tom@yahoo.com”);
批量插入多條數(shù)據(jù)
insert into worker values(‘tom','tom@yahoo.com'),(‘paul','paul@yahoo.com');
給出要賦值的那個(gè)列,然后再列出值的插入數(shù)據(jù)
insert into worker (name) values (‘tom');
insert into worker (name) values (‘tom'), (‘paul');
使用set插入數(shù)據(jù)
insert into worker set name='tom';
在 SET 子句中未命名的行都賦予一個(gè)缺省值,使用這種形式的 INSERT 語(yǔ)句不能插入多行。
一個(gè)expression可以引用在一個(gè)值表先前設(shè)置的任何列,例如:
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
--但不能這樣
INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
使用INSERT…SELECT語(yǔ)句插入從其他表選擇的行
insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;
--如果每一列都有數(shù)據(jù)
insert into tbl_name1 select col3,col4 from tbl_name2;
查詢不能包含一個(gè)ORDER BY子句,而且INSERT語(yǔ)句的目的表不能出現(xiàn)在SELECT查詢部分的FROM子句.
ON DUPLICATE KEY UPDATE
如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后會(huì)導(dǎo)致在一個(gè)UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行舊行UPDATE。
--假設(shè)a,b為唯一索引,表table沒(méi)有1,2這樣的行是正常插入數(shù)據(jù),沖突時(shí),更新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);
向一個(gè)已定義為NOT NULL的列中插入NULL。對(duì)于一個(gè)多行INSERT語(yǔ)句或INSERT INTO...SELECT語(yǔ)句,根據(jù)列數(shù)據(jù)的類型,列被設(shè)置為隱含的默認(rèn)值。對(duì)于數(shù)字類型,默認(rèn)值為0;對(duì)于字符串類型,默認(rèn)值為空字符串('');對(duì)于日期和時(shí)間類型,默認(rèn)值為“zero”值。