Mysql 键'的重复输入;主要';-即使设置为自动增量

Mysql 键'的重复输入;主要';-即使设置为自动增量,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,有点奇怪-我已经有8年没有更改这个站点的配置、数据库和PHP代码了。我为之制作的那个家伙一直在添加、删除、更换没有发行的股票,今天突然出现了这样的错误: Duplicate entry '2541' for key 'PRIMARY' 执行(为文本插入通用值): 四处搜索似乎表明,当主键未设置为“自动递增”时,这是一个常见问题——这是有意义的。然而,通过phpMyAdmin查看,它肯定是 索引中是否有设置为主要而非唯一的内容 数据库中还有5个其他表,但没有一个是链接的(就像通过SQL的硬链接

有点奇怪-我已经有8年没有更改这个站点的配置、数据库和PHP代码了。我为之制作的那个家伙一直在添加、删除、更换没有发行的股票,今天突然出现了这样的错误:

Duplicate entry '2541' for key 'PRIMARY'
执行(为文本插入通用值):

四处搜索似乎表明,当主键未设置为“自动递增”时,这是一个常见问题——这是有意义的。然而,通过phpMyAdmin查看,它肯定是

索引中是否有设置为主要而非唯一的内容

数据库中还有5个其他表,但没有一个是链接的(就像通过SQL的硬链接一样,PHP处理所有跨表的内容)

我检查了一下,库存表中确实有一个ID为2541的项目。那么为什么这个空的自动增量值会转换成一个现有的id呢

编辑

我注意到我最近创建的一个表(可能是通过MySQL Workbench创建的)有不同的索引设置,添加了一个
id\u UNIQUE
索引-我是否需要在导致问题的stock表上使用这些索引之一


根据您的描述和您的评论“有趣的是,每次我刷新ID时,它都试图以1的增量插入(失败),我怀疑该表的自动增量的种子不知何故被更改为之前某个时间插入的某个值

我不知道那到底是怎么发生的

现在,每次尝试插入记录时,该内部计数器都会递增,因此在错误消息中可以看到,当尝试插入行时,该数字会递增(25412542,…),无论事务是否提交到数据库,内部计数器都会递增。在您的情况下,insert操作被回滚,因为生成的值违反了unique约束,并且内部计数器不断增长


要更改种子,可以运行以下语句:

ALTER TABLE stock AUTO_INCREMENT=1234567;
您需要将其设置为表中存在的当前最大值,以便系统尝试插入的新条目不会冲突

另见


演示如何在MySQL Workbench和PhpMyAdmin中更改自动增量种子。可能是有人无意中这样做了,但没有注意到。

“当主键时,这是一个常见的问题”-不,主键是唯一的键你有触发器吗?顺便说一句,名为price的列通常不是双精度的。这就是为什么发明了十进制。你能在不指定列列表中的id列(当然还有值列表中的null)的情况下尝试吗?尝试删除insert语句中的列
id
(即主键),MySql将处理并更新唯一的id,而不重复。@eduardata和@HariKishore-尝试过这个,不幸的是,即使没有指定id,仍然会出现相同的错误:
对键“PRIMARY”重复输入“2545”
有趣的是,每次我刷新id时,它都试图插入(失败)增量1绝对奇妙的Vladimir,谢谢。这提醒了我为什么在提问时尽量提供细节——非常感谢你不仅阅读了我的问题,还阅读了我对其他人评论的回复,以找到这些信息。这工作非常完美,而且很容易修复。将来我会努力使自己更好地熟悉这些功能。不知道这是怎么发生的,除了我没有人可以访问数据库。。。我想主办公司。。。无论如何,再次谢谢你!
ALTER TABLE stock AUTO_INCREMENT=1234567;