这有点奇怪--我已经有8年没有修改这个网站的配置、数据库和PHP代码了。我为之制作的人一直在添加、删除、更改股票,没有任何问题,但今天突然收到了这个错误:
Duplicate entry '2541' for key 'PRIMARY'
执行(为文本插入泛型值):
INSERT INTO stock (id,title,category,description,price,last_update,sold) VALUES(NULL,'Item name','72','Item description','0',1613723525,'no')
搜索似乎表明,当主键没有设置为自动增量时,这是一个常见的问题-这是有意义的。然而,通过phpMyAdmin查看它,它肯定是。
索引中是否有某些内容被设置为主索引而不是唯一索引?
数据库中还有另外5个表,但没有一个是链接的(通过SQL的硬链接,PHP处理所有的交叉表内容)。
我检查了一下,确实在stock表中已经有一个ID为2541的项目。那么为什么NULL是自动_
是否将增量值转换为现有id?
编辑
我注意到我最近创建的一个表(可能是通过MySQL工作台)具有不同的索引设置,添加了一个
索引-我是否需要在stock表上出现一个引起问题的索引?
发布于 2021-02-19 20:23:51
根据您的描述和您的评论“有趣的是,每次我刷新ID时,它都试图插入(但失败了)增量1",我怀疑该表的自动增量的种子不知何故被更改为以前插入的某个值。
我不知道这到底是怎么回事。
现在,每次您尝试插入一条记录时,此内部计数器都会递增,因此您会在错误消息中看到数字递增(2541,2542,...)当您尝试插入行时,无论事务是否提交到数据库,内部计数器都会递增。在本例中,插入操作被回滚,因为生成的值违反了唯一约束,并且内部计数器不断增长。
要更改种子,可以运行以下语句:
ALTER TABLE stock AUTO_INCREMENT=1234567;
您需要将其设置为表中存在的当前最大值,以便系统尝试插入的新条目不会冲突。
另请参阅如何在MySQL中设置初始值和自动递增?
这个答案说明如何在MySQL工作台和PhpMyAdmin中更改自动增量种子。也许有人不小心做了这件事,却没有注意到。
https://stackoverflow.com/questions/66274541
复制相似问题