条件ON DUPLICATE KEY UPDATE

Luc*_*ano 6 mysql conditional on-duplicate-key

我做了一些研究,但似乎没有什么能满足我的需求.我有一个数据库表,其中包含从Web服务中恢复的一些数据.

用户为每个记录执行一些任务,然后将其标记为"已处理".所以我有一个额外的db字段(不是基于我从WS得到的数据),名为"processed",默认设置为0,当用户完成工作时为1.

每天我检查WS,如果状态代码更改我想更新行并设置回处理为0(因此用户可以再次处理它).

让我们说这是我的数据库......

+------+------------+-------+------------+
| id   | statuscode | foo   | processed  |
+------+------------+-------+------------+
| 123  | 66         | bar   | 1          |
+------+------------+-------+------------+
Run Code Online (Sandbox Code Playgroud)
  • 如果没有具有相同密钥(id)的行,我想插入新记录.
  • 如果有一行具有相同的键并且'foo'更改,我想更新除"已处理"字段之外的任何值.
  • 如果有一行具有相同的密钥和状态代码更改,我想更新任何值并将处理设置为0.

我认为ON DUPLICATE KEY UPDATE有一些条件可以使它工作,也许有一些CASE或IF条件......我错了吗?任何建议都很好,谢谢!

ype*_*eᵀᴹ 7

这样的事情(警告:NULL价值没有得到照顾):

INSERT INTO tableX
  (id, statuscode, foo, processed)
VALUES 
  (?, ?, ?, DEFAULT)
ON DUPLICATE KEY UPDATE
  processed = CASE WHEN statuscode <> VALUES(ststuscode)
                     THEN 0
                   ELSE processed
              END 
, statuscode = VALUES(statuscode)
, foo = VALUES(foo) ;
Run Code Online (Sandbox Code Playgroud)