在標(biāo)準(zhǔn)的SQL語(yǔ)句中,插入一條語(yǔ)句是用:
insert into table (field1,field2) values (value1,value2)
而MySQL中提供了一條擴(kuò)展語(yǔ)句:
insert into table set field1 = value1,field2 = value2
第一個(gè)是SQL標(biāo)準(zhǔn),第二個(gè)是MySQL的擴(kuò)展(也就是說只能用在mysql數(shù)據(jù)庫(kù)中的)
有人說它們是等價(jià)且效率是相同的,下面是測(cè)試:
用來測(cè)試的表字段如下

1.png
標(biāo)準(zhǔn)SQL語(yǔ)句,執(zhí)行時(shí)間為6.0ms
insert into user(username,password,realname,addtime) values('test','test','test','12345678901')

2.png
MySQL擴(kuò)展,執(zhí)行時(shí)間為1.9ms
insert into user set username='test',password='test',realname='test',addtime='12345678901'

3.png
可以看出,后者執(zhí)行效率要遠(yuǎn)高于標(biāo)準(zhǔn)values語(yǔ)法。
你只需要遍歷一組鍵值對(duì)來創(chuàng)建你的insert語(yǔ)句,而不是使用values語(yǔ)法所需的兩倍。
所以,使用set語(yǔ)法的語(yǔ)句可以更短,更清晰,以高效率更快寫入,并且可以有效避免在編寫values子句時(shí)混合列順序?qū)е碌钠磳戝e(cuò)誤。
但是,在可移植性上面,只在MySQL上支持的set語(yǔ)法明顯失去了優(yōu)勢(shì),并且在多條插入上,它也同樣雞肋。