你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

ORACLE updata是提示违反唯一约束条件

2021/11/20 8:33:52

如图所示,使用updata语句时提示违反唯一约束条件:

语句如下:

update table_name set param1=‘xxx’,param2=‘xxx’ where param4=‘xxx’;

 解决办法:

一、能用Navicat for Oracle或者sqlplus连接oracle

这里就不用说了,查询一下哪个是唯一键,那个是主键就行了哈哈

还是备注一下查询语句吧,万一你也不知道呢,比如我就是百度好久才找到!

连接远程数据库,如下:

sqlplus 用户名/密码@IP:端口号/数据库名
sqlplus name/key@192.168.66.66:1521/ORCL

查询表主键,如下(注意表名有单引号哈):

select col.column_name from  user_constraints con,user_cons_columns col where  con.constraint_name=col.constraint_name and con.constraint_type='P'  and col.table_name='表名';

查找表的唯一性约束,如下(注意表名有单引号哈):

select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = '表名';

查看表结构,如下(表名大写,没有单引号):

DESC 表名;

切换数据库实例

执行命令:

sqlplus /@ORCL as sysdba; //其中ORCL为具体的实例名称

其他一些命令:

select * from dba_users;// 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system
select * from all_users; // 查看你能管理的所有用户!
select * from user_users; //查看当前用户信息 !

二、不能用Navicat for Oracle或者sqlplus连接oracle

1、在上传前,将要上传的内容弹窗显示出来,方便修改,挨个删除param=‘xxx’,测试到底是哪个参数更新导致的。

2、将找到的违反唯一约束条件的变量 ,比如是param1 。在上传前根据条件where查询出来param1的值,不如等于‘123’,跟现有的要修改成的内容‘123’比较,如果与要修改成的内容一样,则updata语句不要对参数进行修改,即只更新其他值: 

update table_name set  param2=‘xxx’ where param4=‘xxx’;

如果与要修改成的内容不一致再更新其值:

update table_name set param1=‘xxx’,param2=‘xxx’ where param4=‘xxx’;

废话:

这个问题找遍了百度都没有找到解决办法(可能是大家解决了的都没有说出来吧),最后在蹲坑时才行到如此处理哈哈。