ON DUPLICATE KEY UPDATE不仅仅更新插入

时间:2016-03-03 14:15:34

标签: mysql sql

我正在尝试检查客户是否存在会话,以便我可以使用新会话详细信息更新会话或为客户插入会话。我正在使用以下声明:

INSERT INTO sessions (customerid, productlist, date) 
VALUES('33', '{"68":1,"72":1}', '2016-03-03 13:54:56') 
ON DUPLICATE KEY UPDATE customerid=VALUES(customerid)

当我运行此命令时,即使会话已存在,该语句也会为客户插入会话。

2 个答案:

答案 0 :(得分:-1)

确保使用:UNIQUE keycustomerid列创建pdoructlist

答案 1 :(得分:-1)

ON DUPLICATE KEY UPDATE需要UNIQUE INDEX表。它允许在INSERTUNIQUE INDEX而失败时更新已存在的行。

UNIQUE INDEX表中sessions的候选人是customerid。你有这样的指数吗?

无论如何,您发布的查询没有任何意义。当您要插入新行时,ON DUPLICATE KEY UPDATE会启动,而您希望放入customerid的值已存在于表中。 UNIQUE INDEX阻止插入,ON DUPLICATE KEY UPDATE允许更新现有行的某些其他列。

customeridUNIQUE INDEX时,customerid=VALUES(customerid)no-op

你可能想要的是:

INSERT INTO sessions (customerid, productlist, date)
VALUES('33', '{"68":1,"72":1}', '2016-03-03 13:54:56')
ON DUPLICATE KEY UPDATE productlist=VALUES(productlist), date=VALUES(date)

SQLcustomerid UNIQUE INDEX的{​​{1}}语句是:

sessions

或者,更好的是,make是表格的ALTER TABLE `sessions` ADD UNIQUE INDEX `customerid` (`customerid`) (如果表格中没有表格:

PRIMARY KEY