MySQL INSERT INTO表VALUES .. vs INSERT INTO表SET

时间:2009-05-14 05:46:10

标签: sql mysql performance

INSERT INTO table VALUES ..INSERT INTO table SET之间的主要区别是什么?

示例:

INSERT INTO table (a, b, c) VALUES (1,2,3)

INSERT INTO table SET a=1, b=2, c=3

这两个人的表现怎么样?

3 个答案:

答案 0 :(得分:181)

据我所知,两种语法都是等价的。第一个是SQL标准,第二个是MySQL的扩展。

所以他们应该完全相同的表现。

http://dev.mysql.com/doc/refman/5.6/en/insert.html说:

  

INSERT将新行插入现有表中。 INSERT ... VALUES和INSERT ...语句的SET形式根据显式指定的值插入行。 INSERT ... SELECT表单插入从另一个或多个表中选择的行。

答案 1 :(得分:14)

我认为扩展旨在允许插入和更新的类似语法。在Oracle中,类似的语法技巧是:

UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)

答案 2 :(得分:3)

由于语法是等价的(在MySQL无论如何),我更喜欢INSERT INTO table SET x=1, y=2语法,因为它更容易修改并更容易在语句中捕获错误,尤其是在插入大量列时。如果您必须插入10或15个或更多列,我认为使用(x, y) VALUES (1,2)语法很容易混淆。

如果不同SQL标准之间的可移植性存在问题,则可能首选INSERT INTO table (x, y) VALUES (1,2)

如果你想在一个查询中插入多个记录,那么INSERT INTO ... SET语法似乎不会起作用,而另一个则会起作用。但是在大多数实际情况中,你无论如何都要循环遍历一组记录来进行插入,尽管在某些情况下可能会构造一个大型查询以在一个查询中将一堆行插入表中,而不是查询每一行,可能会有性能提升。真的不知道。