INSERT INTO表值之间的主要区别是什么?和插入表集?

例子:

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

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

那这两个的性能呢?


当前回答

由于语法是等效的(在MySQL中无论如何),我更喜欢INSERT INTO表SET x=1, y=2语法,因为它更容易修改和更容易捕捉语句中的错误,特别是在插入大量列时。如果必须插入10或15或更多列,在我看来,使用(x, y) VALUES(1,2)语法很容易混淆一些东西。

如果不同SQL标准之间的可移植性是一个问题,那么可能会首选INSERT INTO表(x, y) VALUES(1,2)。

如果你想在一个查询中插入多条记录,它看起来不像insert INTO…SET语法可以工作,而另一个语法可以。但在大多数实际情况下,无论如何都要遍历一组记录来进行插入,尽管在某些情况下,构造一个大型查询在一个查询中将一堆行插入到表中,而不是对每一行进行查询,可能会提高性能。真的不知道。

其他回答

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

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

由于语法是等效的(在MySQL中无论如何),我更喜欢INSERT INTO表SET x=1, y=2语法,因为它更容易修改和更容易捕捉语句中的错误,特别是在插入大量列时。如果必须插入10或15或更多列,在我看来,使用(x, y) VALUES(1,2)语法很容易混淆一些东西。

如果不同SQL标准之间的可移植性是一个问题,那么可能会首选INSERT INTO表(x, y) VALUES(1,2)。

如果你想在一个查询中插入多条记录,它看起来不像insert INTO…SET语法可以工作,而另一个语法可以。但在大多数实际情况下,无论如何都要遍历一组记录来进行插入,尽管在某些情况下,构造一个大型查询在一个查询中将一堆行插入到表中,而不是对每一行进行查询,可能会提高性能。真的不知道。

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

所以它们的性能应该完全相同。

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

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