MySQL的upsert指的是在一條sql語句中實(shí)現(xiàn)insert和update兩個(gè)操作的組合。簡單來說,就是如果數(shù)據(jù)存在,就更新數(shù)據(jù),如果數(shù)據(jù)不存在,就插入一條新數(shù)據(jù)。
比如有一個(gè)表`test`,有兩個(gè)字段`id`和`name`,需要通過upsert的方式,更新或插入數(shù)據(jù)。可以使用如下語句:
INSERT INTO test (id, name) VALUES (1, 'Tom') ON DUPLICATE KEY UPDATE name = 'Jerry';
這條語句的意思是,如果`test`表中已經(jīng)存在`id`為1的數(shù)據(jù),就將該行數(shù)據(jù)的`name`字段更新為'Jerry';如果不存在,就插入一條新數(shù)據(jù),`id`為1,`name`為'Tom'。
需要注意的是,在執(zhí)行upsert操作的時(shí)候,需要保證表中有主鍵或者唯一索引。上述示例中,`id`字段應(yīng)該是表中的主鍵或唯一索引。
除了使用INSERT語句實(shí)現(xiàn)upsert操作,還可以使用REPLACE語句。REPLACE語句的使用和INSERT類似,只是如果表中已經(jīng)存在相同的數(shù)據(jù),就先刪除原數(shù)據(jù),再插入新數(shù)據(jù)。
REPLACE INTO test (id, name) VALUES (1, 'Tom')
需要注意的是,使用REPLACE語句可以實(shí)現(xiàn)upsert操作,但是會(huì)刪除原數(shù)據(jù),再插入一條新數(shù)據(jù),有時(shí)候不太合適。
下一篇mysql usam