300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql报错:Duplicate entry ‘xx‘ for key ‘PRIMARY‘ 解决可行方案。已解决

mysql报错:Duplicate entry ‘xx‘ for key ‘PRIMARY‘ 解决可行方案。已解决

时间:2020-03-02 09:19:06

相关推荐

mysql报错:Duplicate entry ‘xx‘ for key ‘PRIMARY‘ 解决可行方案。已解决

mysql报错:Duplicate entry ‘xx‘ for key ‘xxux1‘ 解决可行方案。已解决

web开发多次遇到Duplicate entry ‘xx’ for key ‘PRIMARY’ 报错或者Duplicate entry ‘xx‘ for key ‘xxux1‘

报错的原因

这是因为数据库对应的表字段设置了唯一索引.

1.报Duplicate entry ‘xx’ for key ‘PRIMARY’ 错

原因及解决方法

原因一:对应表名称主键没有设置自增解决方法:设置主键自增原因二:插入线程频率较高,没有处理好事务,造成插入sql执行顺序混乱解决方法:把insert into 表名()values();修改为:insert ignore into 表名()values();

2.报Duplicate entry ‘xx’ for key ‘xxux1’ 错

错误例子:

数据库表结构

查询数据库对应表中的order_no的值为’04250001’的记录,发现记录不存在

SELECT * FROM `orders` WHERE `active_flag`='y' AND `order_no`='04250001'

插入新的一条数据,order_no与被物理删除了的某一条数据中的order_no相同,例如

INSERT INTO orders(order_no,DID,active_flag)VALUES('04250001','96445553','y')

报错:

Duplicate entry '04250001' for key 'orders_ux1'

原因及解决方法

原因:这是由于表中对应字段设置了唯一索引,在我们进行逻辑删除时,并没有真正的删除,只是标记为删除状态而已,当我们再进行新增的时候,由于有唯一索引的限制,导致我们不能进行新增成功,所以报错.解决方法1:如果允许的话,把数据库中该字段的唯一索引限制去掉,这样后端可以进行逻辑删除,新增时即使与标记为删除的记录的字段值相等,由于没有唯一索引的限制,可以正常新增解决方法2:不需要去掉数据库中的唯一索引限制,但是当后端开发进行删除操作的时候,执行的是物理删除的sql语句(真正的删除),而不是逻辑删除,同时后端用逻辑判断,去查询数据库中是否有相同的编号存在,如果存在,则不允许新增,如果不存在,则可以新增

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。