程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql insert語句操作實例講解,insert實例講解

mysql insert語句操作實例講解,insert實例講解

編輯:MySQL綜合教程

mysql insert語句操作實例講解,insert實例講解


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”,”[email protected]”);

批量插入多條數據

復制代碼 代碼如下:
insert into worker values(‘tom','[email protected]'),(‘paul','[email protected]');

給出要賦值的那個列,然後再列出值的插入數據

復制代碼 代碼如下:
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時有一些限制:

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不會在從屬服務器中產生與主服務器不一樣的數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved