我时不时地从 MYSQL 中的重复更新查询插入中随机收到此错误。 知道发生了什么事吗?我似乎无法始终如一地重现错误,它有时会发生,有时却不会。
这里是有问题的查询:
INSERT INTO friendships (u_id_1,u_id_2,status) VALUES (?,?,'active') ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);
描述表的模式是:
DROP TABLE IF EXISTS `friendships`;
CREATE TABLE `friendships` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`u_id_1` int(11) NOT NULL,
`u_id_2` int(11) NOT NULL,
`status` enum('active','pending','rejected','blocked') DEFAULT 'pending' NOT NULL,
`initiatiator` enum('1','2','system') DEFAULT 'system' NOT NULL,
`terminator` enum('1','2','system') DEFAULT NULL,
`confirm_timestamp` timestamp DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY (`u_id_1`,`u_id_2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
最佳答案
您的 ON DUPLICATE KEY UPDATE 语句在这里对您没有任何帮助。
您正在获取 LAST_INSERT_ID,它是最后成功插入的行的 auto inc,并尝试使用该 ID 更新重复的行。这将始终导致重复的主要(您正在尝试更改某行的 ID 以匹配您添加的最后一件事的 ID)
关于mysql - 更新中的自动增量值与内部生成的值冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31694731/