mysql insert操做

一、基本語法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時有一些限制: 

  • INSERT DELAYED僅適用於MyISAM, MEMORY和ARCHIVE表。對於MyISAM表,若是在數據文件的中間沒有空閒的塊,則支持同時採用SELECT和INSERT語句。在這些狀況下,基本不須要對MyISAM使用INSERT DELAYED。
  • INSERT DELAYED應該僅用於指定值清單的INSERT語句。服務器忽略用於INSERT DELAYED...SELECT語句的DELAYED和INSERT DELAYED...ON DUPLICATE UPDATE語句的DELAYED。
  • 由於在行被插入前,語句馬上返回,因此您不能使用LAST_INSERT_ID()來獲取AUTO_INCREMENT值。AUTO_INCREMENT值可能由語句生成。
  • 對於SELECT語句,DELAYED行不可見,直到這些行確實被插入了爲止。
  • DELAYED在從屬複製服務器中被忽略了,由於DELAYED不會在從屬服務器中產生與主服務器不同的數據。

 

轉載出處:

http://www.cnblogs.com/ggjucheng/archive/2012/11/05/2754938.html

http://dev.mysql.com/doc/search/?q=insert

相關文章
相關標籤/搜索