一、基本語法html
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會建立一個行,每一個列都被設置爲默認值:mysql
INSERT INTO tbl_name () VALUES();
三、假設worker表只有name和email,插入一條數據sql
insert into worker values('tom','tom@yahoo.com');
四、批量插入多條數據express
insert into user_info values('jiguohui','abc@sina.com'),('wahaha','123@qq.com’);
五、給出要賦值的那個列,而後再列出值的插入數據服務器
insert into user_info (name) values ('jiguohui'); insert into user_info (name) values ('wahaha'),('shita');
六、使用set插入數據ui
insert into user_info set name='jgh';
在 SET 子句中未命名的行都賦予一個缺省值,使用這種形式的 INSERT 語句不能插入多行。spa
七、一個expression能夠引用在一個值表先前設置的任何列,例如線程
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); --但不能這樣 INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
八、使用INSERT…SELECT語句插入從其餘表選擇的行code
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語句的目的表不能出如今SELECT查詢部分的FROM子句.htm
十、ON DUPLICATE KEY UPDATE
若是您指定了ON DUPLICATE KEY UPDATE,而且插入行後會致使在一個UNIQUE索引或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時有一些限制:
轉載出處:
http://www.cnblogs.com/ggjucheng/archive/2012/11/05/2754938.html
http://dev.mysql.com/doc/search/?q=insert