我具有以下表格结构:
表___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_Status
和AVA_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 = 47
和AVA_Date = 2019-03-11
所在的行。
为什么我的查询无法正常工作?
谢谢。
答案 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`)
;