20.违反数据库唯一约束Caused by: dm.jdbc.driver.DMException: Violate unique constraint ,解决思路分析
违反唯一性约束Caused by: dm.jdbc.driver.DMException: Violate unique constraint on [my_table][load_uidxe_idx]
·
现象:
运行Java程序向数据库插入数据时,始终报错:
Caused by: dm.jdbc.driver.DMException: Violate unique constraint on [my_table][load_uidxe_idx]
追溯原因一:
(1)分析日志:
从报错日志来看,是违反了my_table表的load_uidxe_idx唯一索引的唯一性约束。
(2)查看数据库表:
查看my_table表,发现load_uidxe_idx索引是由date和type字段建立的唯一索引。而表中却没有date=2025-03-03且type=2的数据,那么为何还是报违反唯一性约束呢,表中确实无此数据。
(3)问题未被解决。
追溯原因二:
换个思路,不用程序插入数据。 而是运行sql语句进行插入。
insert my_talbe(date,type,data) values('2025-03-03',2,1113333);
此时报错:"违反唯一性约束 sync_trigger[load_uidxe_idx]"。从报错日志上可知是触发器的影响。
之前公司有需求:有2个项目各用一个数据库,为了在A项目的数据插入或更新后,也同步插入或更新数据到B项目。所以建立了表级触发器,用于实现此需求。
如果数据库中有触发器或存储过程在数据插入或更新时自动执行,它们可能会导致违反唯一约束。
虽然建立了触发器从A同步数据到B,但B数据库的数据也会影响 A。B数据库对应表中已经有了date=2025-03-03且type=2的数据,所以向A插入此数据会报错。
问题解决!!!
更多推荐


所有评论(0)