20.违反数据库唯一约束Caused by: dm.jdbc.driver.DMException: Violate unique constraint ,解决思路分析

现象:

运行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插入此数据会报错。

问题解决!!!

你可能感兴趣的:(二.数据库,数据库,oracle,开发语言,服务器,java,数据结构,sql)