想象一下以下场景:
一个包含主题的表,其前身链接到同一个表/对象:
|ID | PREDECESSOR | DESCRIPTION |
+---+-------------+-------------|
| 1 | NULL | Topic 1 |
| 2 | 1 | Topic 2 |
| 3 | 2 | Topic 3 |
列前置任务具有唯一约束,因为一个主题只能是一个主题的前任。
现在我们在应用程序中删除主题2。为实现这一目标,我们必须反对:
|ID | PREDECESSOR | DESCRIPTION |
+---+-------------+-------------|
| 2 | 1 | Topic 2 -> deleted
| 3 | 1 | Topic 3 -> new predecessor, because 2 was deleted
现在我们将这些对象保存在一个事务中:
....
PersistentTransaction trans = session.beginTransaction();
session.saveOrUpdate(object topic 3);
session.delete(object topic 2); //object order does not matter
trans.commit();
休眠日志:
Hibernate:
update
TOPIC
set
.....
如您所见,遗憾的是,在删除导致
的主题2之前调用了主题3的更新SqlException "Duplicate entry '1' for key 'UNIQUE_CONSTRAINT_NAME'
这个例外很清楚,但如果订单是“删除主题2”,之后“更新主题3”,一切都会好的。
为什么在交易过程中检查此约束?在我看来,整个交易应该是有效的,验证应该在交易结束时运行。我不知道什么吗?
有可能在许多其他场景中重新创建此优先级问题,因此很明显不能有严格的顺序,如“先删除,然后修改等......”。或者这可能是数据库中的调整问题? 有人可以帮我解决这个问题吗?
Hibernate 4.2.4; MariaDb 10.1.25
答案 0 :(得分:0)
错误代码:1062。密钥%d重复输入'%s'
示例:强>
错误代码:1062。密钥'PRIMARY'重复输入'1'
案例1:重复值。
您尝试插入的数据已存在于列主键中。主键列是唯一的,它不接受重复的条目。
案例2:唯一数据字段。
您正在尝试将列添加到包含数据的现有表中,并将其设置为唯一。
案例3:数据类型 - 上限。
auto_increment字段已达到其最大范围。
案例1:重复值。
将主键列设置为AUTO_INCREMENT。
ALTER TABLE ‘table_name’ ADD ‘column_name’ INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
现在,当您尝试插入值时,请忽略主键列。您还可以将NULL值插入主键列以生成序列号。如果没有指定值,MySQL将自动分配序列号。
案例2:唯一数据字段。
创建新列而不将其指定为唯一字段,然后插入数据,现在将其设置为唯一字段。它现在可以工作!!!
案例3:数据类型 - 上限。
当数据类型达到其上限时,例如,如果您将主键列指定为TINYINT,则当最后一条记录的ID为127时,当您插入新记录时,id应为128.但是128超出了TINYINT的范围,因此MySQL将其减少到有效范围内并尝试将其插入ID为127,因此会产生重复键错误。
为了解决这个问题,您可以更改索引字段,根据要求将其设置为有符号/无符号INT / BIGINT,以便最大范围增加。您可以使用以下命令执行此操作:
ALTER TABLE ‘table_name’ MODIFY ‘column_name’ INT UNSIGNED NOT NULL AUTO_INCREMENT;
您可以使用以下函数检索最近自动生成的AUTO_INCREMENT值:
的MySQL> SELECT LAST_INSERT_ID();
应用了上述所有解决方案之后仍然如果您遇到此错误代码:1062重复输入错误,您可以尝试以下解决方法。
第1步:备份数据库:
您可以使用以下命令备份数据库:
mysqldump database_name> database_name.sql
第2步:删除并重新创建数据库:
使用以下命令删除数据库:
DROP DATABASE database_name;
使用以下命令创建数据库:
CREATE DATABASE database_name;
第3步:导入数据库:
您可以使用以下命令导入数据库:
mysql database_name < database_name.sql;
应用此变通方法后,将解决重复输入错误。我希望这篇文章能帮助您理解和解决MySQL错误代码:1062。重复输入错误。如果您仍然遇到此问题,可以通过“联系我”页面与我联系。我可以帮你解决这个问题。
资源链接:http://www.rathishkumar.in/2016/01/how-to-solve-mysql-error-code-1062.html