时间:2021-07-01 10:21:17 帮助过: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;">]
- <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;">]
- <span style="color: #0000ff;">VALUES ({expr <span style="color: #808080;">| <span style="color: #0000ff;">DEFAULT<span style="color: #000000;">},...),(...),...
- <span style="color: #ff0000;">[<span style="color: #ff0000;"> ON DUPLICATE KEY UPDATE col_name=expr, ... <span style="color: #ff0000;">]<span style="color: #000000;">
- 或:
- <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;">]
- <span style="color: #ff0000;">[<span style="color: #ff0000;">INTO<span style="color: #ff0000;">]<span style="color: #000000;"> tbl_name
- <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;">}, ...
- <span style="color: #ff0000;">[<span style="color: #ff0000;"> ON DUPLICATE KEY UPDATE col_name=expr, ... <span style="color: #ff0000;">]<span style="color: #000000;">
- 或:
- <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;">]
- <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;">]
- <span style="color: #0000ff;">SELECT<span style="color: #000000;"> ...
- <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会创建一个行,每个列都被设置为默认值:
- <span style="color: #0000ff;">INSERT <span style="color: #0000ff;">INTO tbl_name () <span style="color: #0000ff;">VALUES();</span></span></span>
假设worker表只有name和email,插入一条数据
- <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>
批量插入多条数据
- <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>
给出要赋值的那个列,然后再列出值的插入数据
- <span style="color: #0000ff;">insert <span style="color: #0000ff;">into worker (name) <span style="color: #0000ff;">values<span style="color: #000000;"> (‘tom’);
- <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插入数据
- <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可以引用在一个值表先前设置的任何列,例如
- <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;">);
- <span style="color: #008080;">--<span style="color: #008080;">但不能这样
- <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语句插入从其他表选择的行
- <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;
- <span style="color: #008080;">--<span style="color: #008080;">如果每一列都有数据
- <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。
- <span style="color: #008080;">--<span style="color: #008080;">假设a,b为唯一索引,表table没有1,2这样的行是正常插入数据,冲突时,更新c列的值
- <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;">;
- <span style="color: #008080;">--<span style="color: #008080;">或者是
- <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);
- <span style="color: #008080;">--<span style="color: #008080;">引用其他列更新冲突的行
- <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
- <span style="color: #0000ff;">insert <span style="color: #0000ff;">into<span style="color: #000000;"> tbl_name1(a,b,c)
- <span style="color: #0000ff;">select col1,col2,col3 <span style="color: #0000ff;">from<span style="color: #000000;"> tbl_name2
- <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的另一个重要的好处是,来自许多客户端的插入被集中在一起,并被编写入一个块。这比执行许多独立的插入要快很多。
- <span style="color: #0000ff;">INSERT DELAYED <span style="color: #0000ff;">INTO worker (name) <span style="color: #0000ff;">values (‘tom’), (‘paul’);</span></span></span>
使用DELAYED时有一些限制:
转自 http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#insert
MySQL INSERT语句
标签: