mysql - 更新中的自动增量值与内部生成的值冲突

标签 mysql sql prepared-statement innodb

我时不时地从 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/

相关文章:

java - 准备好的语句更新问题

c# - ASP.NET EntityFramework 获取数据库名称

php - 我无法弄清楚 mysql 更改列语法

mySQL-触发更新 COUNT 个基本插入值

java - 插入抛出无效的列索引

mysql - mysqli 中的准备好的语句不起作用

java - GAE : 30-40 Second Queries to Cloud SQL

java - JPA 与同一实体的关系

sql - 更新查询 MS Access 加入

PHP/SQL - 如何过滤掉与另一个表的数据冲突的记录?