mysql insert操作

來源:互聯網
上載者:User

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();

假設worker表只有name和email,插入一條資料

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’);

使用set插入資料

insert into worker set name=’tom’;

在 SET 子句中未命名的行都賦予一個預設值,使用這種形式的 INSERT 語句不能插入多行。

 

一個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子句,而且INSERT語句的目的表不能出現在SELECT查詢部分的FROM子句.

 

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://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#insert

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.