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

Irm*_*tas 241 mysql sql 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
Run Code Online (Sandbox Code Playgroud)

那么这两个的表现怎么样?

Vin*_*vic 187

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

所以他们应该完全相同的表现明智.

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

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

  • 我的意思是,INSERT多行.如:INSERT INTO表(a,b,c)VALUES(1,2,3),(4,5,6),(7,8,9); (8认同)
  • @VinkoVrsalovic,不是真的,插入选择也可以在选择多行时插入多行 (7认同)
  • 如何使用`INSERT INTO table SET`插入多个值?这甚至可能吗? (4认同)
  • 只有使用VALUES语法的INSERT语句才能插入多行. (3认同)
  • 你什么意思?OP的例子说SET a = 1,b = 2,c = 3,这是我理解中的多个值. (2认同)

小智 15

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

UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
Run Code Online (Sandbox Code Playgroud)

  • @Pacerier这是一个公平的观点,并且需要权衡权衡.对于这个功能,你有可移植性问题和浪费时间来研究`INSERT ... SET ...`和`INSERT ... VALUES ...`之间的区别.对于该功能,您可以使用更短,更快写入的代码,提高可读性,并消除在编写"VALUES"子句时混合列顺序所导致的拼写错误.我的直觉告诉我,网上的好处超过了坏处,但你的判断可能会有所不同. (12认同)
  • @Pacerier我不确定我是否看到了你的观点?浪费了几点时间?有一个好处,已经指出:只需要一次键入一对键/值对来创建INSERT语句,而不是使用VALUES语法所需的两倍,这样可以缩短,更清晰,以及更快写入的代码. (8认同)
  • @Pacerier如?我看到的唯一问题是可移植性(在许多情况下并不重要); 我错过了什么吗? (5认同)

Aar*_*ine 6

由于语法是等效的(无论如何在 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语法似乎不起作用,而另一个则可以。但是在大多数实际情况下,您无论如何都要遍历一组记录以进行插入,尽管在某些情况下可能会构造一个大型查询以在一个查询中将一堆行插入到表中,而不是查询每一行,可能都有性能改进。真的不知道。