REPLACE、INSERT、ON DUPLICATE KEY UPDATE

在很多情况下,我们需要处理重复项。行唯一性由主键标识。如果行已经存在,则REPLACE会简单的删除行并插入行新行;如果行不存在,则REPLACE等同于INSERT。
如果你想在行已经存在的情况下处理重复项,则需要使用ON DUPLICATE KEY UPDATE。如果指定了ON DUPLICATE KEY UPDATE选项,并且INSERT语句在PRIMARY KEY中引发了重复项,则MYSQL会用新值更新已有行。
假设你希望每次从同一个客户那里收到付款后更新之前的金额,并且在客户首次付款时插入新的记录,那么你需要定义一个金额栏,并在每次收到新付款时进行更新。
REPLACE INTO customers VALUES (1,’Mike’,’christensen’,’America’);
Affected rows: 2, Time: 0.024000s
可以看到有两行受到影响,一个重复行被删除,一个新行被插入
INSERT INTO payments VALUES(‘Mike Christensen’,200)
ON DUPLICATE KEY UPDATE payment=payment+VALUES(payment);
INSERT INTO payments VALUES(‘Ravi Christensen’,500)
ON DUPLICATE KEY UPDATE payment=payment+VALUES(payment);
当Mike下次支付300元时,将更新该行并将此付款金额添加到以前的金额中
INSERT INTO payments VALUES(‘Mike Christensen’,300)
ON DUPLICATE KEY UPDATE payment=payment+VALUES(payment);
VALUES(payment):指INSERT语句中给出的值,payment指的是表中的列