ORA-00001唯一约束错误求助:插入Store_Owner1表时报错
搞定ORA-00001: unique constraint违反问题
兄弟,咱们先把这个问题拆明白:ORA-00001本质就是你要插入的记录触发了唯一约束——这里就是你的OwnerID主键,主键天生要求绝对唯一。
为啥查询结果看着正常,但插的时候报错?
你执行select *看到的那条记录,大概率是你之前已经成功插入过一次了,后来又重复跑了同一条insert语句,自然就触发主键重复的错误了。毕竟主键不允许表里有两个一模一样的OwnerID值。
先验证是不是真的重复了
你可以跑这两条SQL确认一下:
-- 检查所有重复的OwnerID SELECT OwnerID, COUNT(*) FROM Store_Owner1 GROUP BY OwnerID HAVING COUNT(*) > 1; -- 直接查询你要插入的这个OwnerID SELECT * FROM Store_Owner1 WHERE OwnerID = 0563224789;
如果第二条查询返回1条结果,那就是你重复执行insert导致的;如果返回多条,那就是之前操作不小心插入了两次。
怎么解决?
根据你的需求选对应的方案:
- 要是想插入新的店主数据:换个没人用的
OwnerID就行,比如把0563224789改成0563224790:insert into Store_Owner1 (phone_number, f_name, last_name, OwnerID, Email) values (0258744169, 'WAFA', 'ALOUFI', 0563224790, 'WAFA_NEW@GMAIL.com'); - 要是想更新已有的这条记录:别用
insert,改用update:UPDATE Store_Owner1 SET phone_number = 0258744169, f_name = 'WAFA', last_name = 'ALOUFI', Email = 'WAFA@GMAIL.com' WHERE OwnerID = 0563224789; - 要是不小心重复插了,先删了再重新来:
DELETE FROM Store_Owner1 WHERE OwnerID = 0563224789; -- 再执行你的insert语句 insert into Store_Owner1 (phone_number, f_name, last_name, OwnerID, Email) values (0258744169, 'WAFA', 'ALOUFI', 0563224789, 'WAFA@GMAIL.com');
给你个防坑小技巧
以后可以用Oracle的MERGE语句,不管记录存在不存在都能处理——存在就更新,不存在就插入,再也不用怕重复执行报错了:
MERGE INTO Store_Owner1 t USING (SELECT 0258744169 AS phone_number, 'WAFA' AS f_name, 'ALOUFI' AS last_name, 0563224789 AS OwnerID, 'WAFA@GMAIL.com' AS Email FROM dual) s ON (t.OwnerID = s.OwnerID) WHEN MATCHED THEN UPDATE SET t.phone_number = s.phone_number, t.f_name = s.f_name, t.last_name = s.last_name, t.Email = s.Email WHEN NOT MATCHED THEN INSERT (phone_number, f_name, last_name, OwnerID, Email) VALUES (s.phone_number, s.f_name, s.last_name, s.OwnerID, s.Email);
内容的提问来源于stack exchange,提问作者yuki
相关产品推荐
相关产品推荐

