这个查询正在运行一个从PHP调用的upsert,我没有得到除一个表之外的更新,这真的很奇怪。我尝试了查询,并注意到这似乎是这种情况。如果我为以下值运行它,则该行不会更新。
行
operation_attendee_id operation_id member_id status
1 5 1 1
查询:
INSERT INTO
`operation_attendee` (
`operation_id`,
`member_id`,
`status`)
VALUES
(5,
1,
3)
ON DUPLICATE KEY UPDATE
`status` = 3
这不会更新表,但是在operation_id,member_id
上有一个唯一索引如果我跑这一行
operation_attendee_id operation_id member_id status
0 7 1 1
相同的查询,不同的数字
INSERT INTO
`operation_attendee` (
`operation_id`,
`member_id`,
`status`)
VALUES
(7,
1,
3)
ON DUPLICATE KEY UPDATE
`status` = 3
这个更新很好。我真的很困惑为什么这似乎是唯一正在更新的价值集。
编辑:添加表DDL和所有索引:
CREATE TABLE `operation_attendee` (
`operation_attendee_id` int(11) NOT NULL,
`operation_id` int(11) NOT NULL,
`member_id` int(11) NOT NULL,
`status` int(11) NOT NULL,
PRIMARY KEY (`operation_attendee_id`),
UNIQUE KEY `uk_operation_member` (`operation_id`,`member_id`),
KEY `fk_operation_attendee_operation1_idx` (`operation_id`),
KEY `fk_operation_attendee_member1_idx` (`member_id`),
KEY `fk_operation_attendee_operation_attendee_status1_idx` (`status`),
CONSTRAINT `fk_operation_attendee_member1` FOREIGN KEY (`member_id`) REFERENCES `member` (`member_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_operation_attendee_operation1` FOREIGN KEY (`operation_id`) REFERENCES `operation` (`operation_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_operation_attendee_operation_attendee_status1` FOREIGN KEY (`status`) REFERENCES `operation_attendee_status` (`operation_attendee_status_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我还尝试使用外键检查来运行查询,但它仍然没有更新。
和
答案 0 :(得分:1)
这似乎与代理键有关。
我删除了它(该表不需要它,有人在很长一段时间内构建它),然后用我之前使用的唯一键替换主键(因为它是冗余的,所以也删除了唯一键) )现在查询似乎工作正常。
我不确定为什么它会在潜在原因方面造成问题,但它现在有效。我认为我放在桌面上的唯一密钥符合ON DUPLICATE KEY UPDATE要求的条件。