当前位置:Gxlcms > 数据库问题 > MySQL INSERT语句

MySQL INSERT语句

时间:2021-07-01 10:21:17 帮助过:6人阅读

  1. <span style="color: #0000ff;">INSERT <span style="color: #ff0000;">[<span style="color: #ff0000;">LOW_PRIORITY | DELAYED | HIGH_PRIORITY<span style="color: #ff0000;">] <span style="color: #ff0000;">[<span style="color: #ff0000;">IGNORE<span style="color: #ff0000;">]
  2. <span style="color: #ff0000;">[<span style="color: #ff0000;">INTO<span style="color: #ff0000;">] tbl_name <span style="color: #ff0000;">[<span style="color: #ff0000;">(col_name,...)<span style="color: #ff0000;">]
  3. <span style="color: #0000ff;">VALUES ({expr <span style="color: #808080;">| <span style="color: #0000ff;">DEFAULT<span style="color: #000000;">},...),(...),...
  4. <span style="color: #ff0000;">[<span style="color: #ff0000;"> ON DUPLICATE KEY UPDATE col_name=expr, ... <span style="color: #ff0000;">]<span style="color: #000000;">
  5. 或:
  6. <span style="color: #0000ff;">INSERT <span style="color: #ff0000;">[<span style="color: #ff0000;">LOW_PRIORITY | DELAYED | HIGH_PRIORITY<span style="color: #ff0000;">] <span style="color: #ff0000;">[<span style="color: #ff0000;">IGNORE<span style="color: #ff0000;">]
  7. <span style="color: #ff0000;">[<span style="color: #ff0000;">INTO<span style="color: #ff0000;">]<span style="color: #000000;"> tbl_name
  8. <span style="color: #0000ff;">SET <span style="color: #ff00ff;">col_name<span style="color: #808080;">={expr <span style="color: #808080;">| <span style="color: #0000ff;">DEFAULT<span style="color: #000000;">}, ...
  9. <span style="color: #ff0000;">[<span style="color: #ff0000;"> ON DUPLICATE KEY UPDATE col_name=expr, ... <span style="color: #ff0000;">]<span style="color: #000000;">
  10. 或:
  11. <span style="color: #0000ff;">INSERT <span style="color: #ff0000;">[<span style="color: #ff0000;">LOW_PRIORITY | HIGH_PRIORITY<span style="color: #ff0000;">] <span style="color: #ff0000;">[<span style="color: #ff0000;">IGNORE<span style="color: #ff0000;">]
  12. <span style="color: #ff0000;">[<span style="color: #ff0000;">INTO<span style="color: #ff0000;">] tbl_name <span style="color: #ff0000;">[<span style="color: #ff0000;">(col_name,...)<span style="color: #ff0000;">]
  13. <span style="color: #0000ff;">SELECT<span style="color: #000000;"> ...
  14. <span style="color: #ff0000;">[<span style="color: #ff0000;"> ON DUPLICATE KEY UPDATE col_name=expr, ... <span style="color: #ff0000;">]</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
技术分享

如果列清单和VALUES清单均为空清单,则INSERT会创建一个行,每个列都被设置为默认值:

  1. <span style="color: #0000ff;">INSERT <span style="color: #0000ff;">INTO tbl_name () <span style="color: #0000ff;">VALUES();</span></span></span>

假设worker表只有name和email,插入一条数据

  1. <span style="color: #0000ff;">insert <span style="color: #0000ff;">into worker <span style="color: #0000ff;">values(“tom”,”tom<span style="color: #008000;">@yahoo.com”);</span></span></span></span>

批量插入多条数据

  1. <span style="color: #0000ff;">insert <span style="color: #0000ff;">into worker <span style="color: #0000ff;">values(‘tom’,’tom<span style="color: #008000;">@yahoo.com’),(‘paul’,’paul<span style="color: #008000;">@yahoo.com’);</span></span></span></span></span>

给出要赋值的那个列,然后再列出值的插入数据

  1. <span style="color: #0000ff;">insert <span style="color: #0000ff;">into worker (name) <span style="color: #0000ff;">values<span style="color: #000000;"> (‘tom’);
  2. <span style="color: #0000ff;">insert <span style="color: #0000ff;">into worker (name) <span style="color: #0000ff;">values (‘tom’), (‘paul’);</span></span></span></span></span></span></span>

使用set插入数据

  1. <span style="color: #0000ff;">insert <span style="color: #0000ff;">into worker <span style="color: #0000ff;">set name<span style="color: #808080;">=’tom’;</span></span></span></span>

在 SET 子句中未命名的行都赋予一个缺省值,使用这种形式的 INSERT 语句不能插入多行。

 

一个expression可以引用在一个值表先前设置的任何列,例如

  1. <span style="color: #0000ff;">INSERT <span style="color: #0000ff;">INTO tbl_name (col1,col2) <span style="color: #0000ff;">VALUES(<span style="color: #800000; font-weight: bold;">15,col1<span style="color: #808080;">*<span style="color: #800000; font-weight: bold;">2<span style="color: #000000;">);
  2. <span style="color: #008080;">--<span style="color: #008080;">但不能这样
  3. <span style="color: #0000ff;">INSERT <span style="color: #0000ff;">INTO tbl_name (col1,col2) <span style="color: #0000ff;">VALUES(col2<span style="color: #808080;">*<span style="color: #800000; font-weight: bold;">2,<span style="color: #800000; font-weight: bold;">15);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

 

使用INSERT…SELECT语句插入从其他表选择的行

  1. <span style="color: #0000ff;">insert <span style="color: #0000ff;">into tbl_name1(col1,col2) <span style="color: #0000ff;">select col3,col4 <span style="color: #0000ff;">from<span style="color: #000000;"> tbl_name2;
  2. <span style="color: #008080;">--<span style="color: #008080;">如果每一列都有数据
  3. <span style="color: #0000ff;">insert <span style="color: #0000ff;">into tbl_name1 <span style="color: #0000ff;">select col3,col4 <span style="color: #0000ff;">from tbl_name2;</span></span></span></span></span></span></span></span></span></span></span>

查询不能包含一个ORDER BY子句,而且INSERT语句的目的表不能出现在SELECT查询部分的FROM子句.

 

ON DUPLICATE KEY UPDATE

如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE。

 

  1. <span style="color: #008080;">--<span style="color: #008080;">假设a,b为唯一索引,表table没有1,2这样的行是正常插入数据,冲突时,更新c列的值
  2. <span style="color: #0000ff;">INSERT <span style="color: #0000ff;">INTO <span style="color: #0000ff;">table (a,b,c) <span style="color: #0000ff;">VALUES (<span style="color: #800000; font-weight: bold;">1,<span style="color: #800000; font-weight: bold;">2,<span style="color: #800000; font-weight: bold;">3) <span style="color: #0000ff;">ON DUPLICATE <span style="color: #0000ff;">KEY <span style="color: #0000ff;">UPDATE c<span style="color: #808080;">=<span style="color: #800000; font-weight: bold;">3<span style="color: #000000;">;
  3. <span style="color: #008080;">--<span style="color: #008080;">或者是
  4. <span style="color: #0000ff;">INSERT <span style="color: #0000ff;">INTO <span style="color: #0000ff;">table (a,b,c) <span style="color: #0000ff;">VALUES (<span style="color: #800000; font-weight: bold;">1,<span style="color: #800000; font-weight: bold;">2,<span style="color: #800000; font-weight: bold;">3) <span style="color: #0000ff;">ON DUPLICATE <span style="color: #0000ff;">KEY <span style="color: #0000ff;">UPDATE c<span style="color: #808080;">=<span style="color: #0000ff;">values<span style="color: #000000;">(c);
  5. <span style="color: #008080;">--<span style="color: #008080;">引用其他列更新冲突的行
  6. <span style="color: #0000ff;">INSERT <span style="color: #0000ff;">INTO <span style="color: #0000ff;">table (a,b,c) <span style="color: #0000ff;">VALUES (<span style="color: #800000; font-weight: bold;">1,<span style="color: #800000; font-weight: bold;">2,<span style="color: #800000; font-weight: bold;">3),(<span style="color: #800000; font-weight: bold;">4,<span style="color: #800000; font-weight: bold;">5,<span style="color: #800000; font-weight: bold;">6) <span style="color: #0000ff;">ON DUPLICATE <span style="color: #0000ff;">KEY <span style="color: #0000ff;">UPDATE c<span style="color: #808080;">=<span style="color: #0000ff;">VALUES(a)<span style="color: #808080;">+<span style="color: #0000ff;">VALUES(b);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

 向一个已定义为NOT NULL的列中插入NULL。对于一个多行INSERT语句或INSERT INTO...SELECT语句,根据列数据的类型,列被设置为隐含的默认值。对于数字类型,默认值为0;对于字符串类型,默认值为空字符串(‘‘);对于日期和时间类型,默认值为“zero”值。

INSERT INTO...SELECT的ON DUPLICATE KEY UPDATE

  1. <span style="color: #0000ff;">insert <span style="color: #0000ff;">into<span style="color: #000000;"> tbl_name1(a,b,c)
  2. <span style="color: #0000ff;">select col1,col2,col3 <span style="color: #0000ff;">from<span style="color: #000000;"> tbl_name2
  3. <span style="color: #0000ff;">ON DUPLICATE <span style="color: #0000ff;">KEY <span style="color: #0000ff;">UPDATE c<span style="color: #808080;">=<span style="color: #0000ff;">values(c);</span></span></span></span></span></span></span></span></span></span></span>

 

INSERT DELAYED

如果您的客户端不能等待INSERT完成,则这个选项是非常有用的,当一个客户端使用INSERT DELAYED时,会立刻从服务器处得到一个确定。并且行被排入队列,当表没有被其它线程使用时,此行被插入。

使用INSERT DELAYED的另一个重要的好处是,来自许多客户端的插入被集中在一起,并被编写入一个块。这比执行许多独立的插入要快很多。

  1. <span style="color: #0000ff;">INSERT DELAYED <span style="color: #0000ff;">INTO worker (name) <span style="color: #0000ff;">values (‘tom’), (‘paul’);</span></span></span>

使用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

MySQL INSERT语句

标签:

人气教程排行