MySQL INSERT无法按预期工作

时间:2014-03-18 20:41:48

标签: mysql

这个查询正在运行一个从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

我还尝试使用外键检查来运行查询,但它仍然没有更新。

1 个答案:

答案 0 :(得分:1)

这似乎与代理键有关。

我删除了它(该表不需要它,有人在很长一段时间内构建它),然后用我之前使用的唯一键替换主键(因为它是冗余的,所以也删除了唯一键) )现在查询似乎工作正常。

我不确定为什么它会在潜在原因方面造成问题,但它现在有效。我认为我放在桌面上的唯一密钥符合ON DUPLICATE KEY UPDATE要求的条件。