欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘2424‘ for key ‘x.PRIMARY’

程序员文章站 2022-04-13 08:56:46
很明显,出先这个问题的原因是主键重复,可我的要插入的表里,这个主键设的是自增的,同时这个主键‘2424‘的值也不存在于要插入的表中,于是我试着在表里,将2424手动插入,同样的显示该主键已存在,又试着将主键设大点,还是已存在。SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_schema="dataBaseName" AND table_name="tableA"; 查询结果是2420,也是正常的。后来想起来,这张要....

很明显,出先这个问题的原因是主键重复,可我的要插入的表里,这个主键设的是自增的,同时这个主键‘2424‘的值也不存在于要插入的表中,于是我试着在表里,将2424手动插入,同样的显示该主键已存在,又试着将主键设大点,还是已存在。

SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_schema="dataBaseName" AND table_name="tableA"; 查询结果是2420,也是正常的。

 

后来想起来,这张要插入的表里,有个触发器,插入的同时会插入到另外一张表里,于是查看另外那张表的自增主键,

查询结果是3800多,而且确实是存在2424这个主键的数据,至此,原因找到,于是就将触发器中在插入另外一张表的时候,主键不用第一张表的主键,而是使用自己的主键,也就是不要使用insert into tableB(id,name) values(new.id,new.name).

要改成insert into tableB (name) values(new.name),并将主键设为自增。改过来后,问题解决了。

总结:mysql如果使用触发器,会将异常抛出在要插入的第一张表里,如果不熟悉的话,可能会在第一张表里花时间找原因,从而忽略了是第二张表的问题。

 

本文地址:https://blog.csdn.net/a635732917/article/details/107327296