MySQL里INSERT INTO table VALUES 和 INSERT INTO table SET 有什么区别?

就像下面这两个sql,它们之间有什么区别呢?

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

相同点

都是插入语句,都能插入行数据。

不同点

a.INSERT INTO table SET 这种写法可能不是sql的标准写法,它是MySQL的扩展。而INSERT INTO表([列名,列名b])VALUES([‘value a’,’value b’])这种写法是标准的sql。
b.基于上面一条的区别,那么INSERT INTO table SET a=1, b=2, c=3的可移植性就会比INSERT INTO table (a, b, c) VALUES (1,2,3)低。
c.根据http://dev.mysql.com/doc/refman/5.6/en/insert.html的介绍,只有使用VALUES语法的INSERT语句才能插入多行。
d.在Oracle中,有一个和 insert…set… 类似的语法技巧是:UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
e.至于性能,有一种说法是 insert…set… 这种语句只需要一次遍历键/值对数组就可以创建INSERT语句,而不是像使用VALUES语法那样需要遍历两次,性能会更好,当然这只是猜测,具体是否是真的,本人还没验证。
f.INSERT INTO表([列名,列名b])VALUES([‘value a’,’value b’])这种写法有一个不好的地方是,当要插入的列比较多时,那极有可能看不清,导致混淆而插入数据错误。而INSERT INTO table SET a=1, b=2, c=3这种写法就要清晰多了。

0

《MySQL里INSERT INTO table VALUES 和 INSERT INTO table SET 有什么区别?》有一个想法

发表评论

邮箱地址不会被公开。