使用ON DUPLICATE KEY UPDATE用MySQL更新行

时间:2019-03-07 02:36:27

标签: mysql

我具有以下表格结构:

___Availabilities

|--------|------------|------------|------------|
| AVA_Id | AVA_RoomId | AVA_Date   | AVA_Status |
|--------|------------|------------|------------|
|      1 |         47 | 2019-03-11 |     NoData |
|      2 |         48 | 2019-03-22 |       Book |
|      3 |         48 | 2019-03-23 |       Book |
|--------|------------|------------|------------|

仅在表的一行中知道AVA_StatusAVA_RoomId的情况下,我才想更新AVA_Date。如果没有,请插入新行。

所以我的查询就是这个:

INSERT INTO ___Availabilities 
    (AVA_Id, AVA_RoomId, AVA_Date, AVA_Status) 
    VALUES('', '103', '2019-04-04', 'Open')
ON DUPLICATE KEY UPDATE
    `AVA_RoomId`='47',
    `AVA_Date`='2019-03-11'

但是它不起作用,因为它添加了新行,而应该更新AVA_RoomId = 47AVA_Date = 2019-03-11所在的行。

为什么我的查询无法正常工作?

谢谢。

1 个答案:

答案 0 :(得分:0)

假设有一个UNIQUE INDEX(AVA_RoomId, AVA_Date)

当房间和日期的组合已经存在时,您可能想更新AVA_Status

INSERT INTO ___Availabilities 
    (`AVA_RoomId`, `AVA_Date`, `AVA_Status`) 
    VALUES('103', '2019-04-04', 'Open')
ON DUPLICATE KEY UPDATE
    `AVA_Status` = VALUES(`AVA_Status`),

正如@Barmar已经解释的那样,如果尚未完成,您仍然可以在创建表后添加索引:

ALTER TABLE `___Availabilities`
  ADD UNIQUE INDEX `uq_room_date` (`AVA_RoomId`, `AVA_Date`)
;