MySQL INSERT INTO表VALUES ..与INSERT INTO表SET
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
那么这两个performance呢?
据我所知,两种语法都是相同的。 第一个是SQL标准,第二个是MySQL的扩展。
所以他们应该完全相同的performance明智。
http://dev.mysql.com/doc/refman/5.6/en/insert.html说:;
INSERT将新行插入到现有表中。 INSERT … VALUES和INSERT … SET语句根据显式指定的值插入行。 INSERT … SELECT表单插入从另一个或多个表中select的行。
我认为扩展是为了允许插入和更新类似的语法。 在Oracle中,类似的语法技巧是:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
由于语法是等价的(在MySQL中),我更喜欢INSERT INTO table SET x=1, y=2
语法,因为它更容易修改,并且更容易捕获语句中的错误,尤其是在插入大量列时。 如果你不得不插入10或者15或者更多的列,在我看来(x, y) VALUES (1,2)
使用(x, y) VALUES (1,2)
语法很容易混合使用。
如果不同SQL标准之间的可移植性是一个问题,那么INSERT INTO table (x, y) VALUES (1,2)
将是首选。
如果你想插入多个logging在一个单一的查询,它似乎不像INSERT INTO ... SET
语法将工作,而另一个将。 但是在大多数实际情况下,您正在循环一组logging以进行插入,不过有时可能会构build一个大的查询,以便在一个查询中插入一堆行到表中,每行可能会有性能提升。 真的不知道。