问答中心分类: MYSQLMySQL插入表值。。vs插入表格集
0
匿名用户 提问 7小时 前

两者的主要区别是什么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

这两个人的表现如何?

2 Answers
0
user69173user69173 回答 7小时 前

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

UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
Mark Amery 回复 7小时 前

@起搏器,如?我看到的唯一问题是可移植性(在许多情况下,这并不重要);我错过什么了吗?

Pacerier 回复 7小时 前

@马克·默里,是的,当你看到它的时候,没有什么真正的好处。缺点是浪费了不必要的时间,这条线索的存在证明了我的观点。

Mark Amery 回复 7小时 前

@Pacier我不确定我是否明白你的意思?浪费了多少时间?有一个好处,已经指出了这一点:创建INSERT语句只需在键/值对数组上循环一次,而不是使用VALUES语法所需的两次,这样可以缩短、更清晰、更快地编写代码。

hobbs 回复 7小时 前

@MarkAmery但这个甲骨文的把戏这一好处。首先命名所有列,然后命名所有值。

Mark Amery 回复 7小时 前

@霍布斯:我猜他指的是MySQL扩展,这是问题的主题。也许我误解了。我对甲骨文一无所知。

Pacerier 回复 7小时 前

@马克·莫里,是的,你不明白我的意思。当我们需要迁移时,这些额外的不可互操作的特性正在浪费我们的时间。在科技界发生. 大量开发人员的时间被浪费掉了,因为他们过滤掉了复杂的特殊功能,而这些功能只适合拥有,却没有提供真正的好处。此线程已具有157k视图;告诉我,如果MySQL不创建新的insert set语法?

Mark Amery 回复 7小时 前

@这是一个公平的观点,需要权衡权衡。针对该功能,您存在可移植性问题,并且浪费了大量时间研究INSERT ... SET ...INSERT ... VALUES .... 对于该功能,您可以缩短代码编写时间,加快代码编写速度,提高可读性,并消除在编写VALUES条款我的直觉告诉我,总的来说,好事大于坏事,但你的判断可能会有所不同。

Mark Carpenter Jr 回复 7小时 前

我知道这很古老,但我只是想指出,乍一看,这种语法有多糟糕。我可以看出这会引起混乱。

guido 回复 7小时 前

@Parcerier:这里有一个语法很有用的地方。除非我遗漏了一些东西,否则我看不出“价值观”方法如何可能做到这一点。堆栈溢出。com/questions/17893691/…

0
Aaron Wallentine 回答 7小时 前

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