问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Oracle数据库中违反唯一约束的处理

发布网友 发布时间:2023-02-17 04:05

我来回答

1个回答

热心网友 时间:2023-09-18 21:04

  根据NULL的定义 NULL表示的是未知 因此两个NULL比较的结果既不相等 也不不等 结果仍然是未知 根据这个定义 多个NULL值的存在应该不违反唯一约束

  实际上Oracle也是如此实现的

  SQL> CREATE TABLE T (ID NUMBER);

  表已创建

  SQL> ALTER TABLE T ADD UNIQUE (ID);

  表已更改

  SQL> INSERT INTO T VALUES ( );

  已创建 行

  SQL> INSERT INTO T VALUES ( );

  INSERT INTO T VALUES ( )

  *第 行出现错误:

  ORA : 违反唯一约束条件 (YANGTK SYS_C )

  SQL> INSERT INTO T VALUES (NULL);

  已创建 行

  SQL> INSERT INTO T VALUES (NULL);

  已创建 行

  SQL> INSERT INTO T VALUES (NULL);

  已创建 行

  但是当唯一约束为复合字段时 则情况发生了变化 根据Oracle文档的描述 对于复合字段的唯一约束 不为空字段的值是不能重复的 也就是说 如果两个字段构成了一个唯一约束 其中一个字段为空 那么另一个字段的值不能出现重复

  SQL> DROP TABLE T PURGE;

  表已删除

  SQL> CREATE TABLE T (ID NUMBER ID NUMBER);

  表已创建

  SQL> ALTER TABLE T ADD UNIQUE (ID ID );

  表已更改

  SQL> INSERT INTO T VALUES ( );

  已创建 行

  SQL> INSERT INTO T VALUES ( NULL);

  已创建 行

  SQL> INSERT INTO T VALUES ( NULL);

  已创建 行

  SQL> INSERT INTO T VALUES ( NULL);

  INSERT INTO T VALUES ( NULL)

  *第 行出现错误:

  ORA : 违反唯一约束条件 (YANGTK SYS_C )

  SQL> INSERT INTO T VALUES (NULL NULL);

  已创建 行

  SQL> INSERT INTO T VALUES (NULL NULL);

  已创建 行

  SQL> INSERT INTO T VALUES (NULL NULL);

  已创建 行

  对于全部为NULL的情况 仍然和单字段唯一约束一样 不会造成重复 但是对于部分为NULL的情况 就如上面例子所示 只要其中不为NULL的部分发生了重复 Oracle就认为约束发生了重复

  而这似乎和NULL的定义有所冲突 第一次看concept的时候一直没有搞明白Oracle为什么这么实现 不过这次再看concept的时候 已经想明白了

  由于Oracle的唯一约束是依赖索引实现的 而Oracle的BTREE索引又是不存储NULL值的 所以键值全部为NULL的记录不会记录在索引中 因此也就不会违反唯一约束了 而对于部分为NULL的记录 索引是要记录数值的 因此一旦键值中非NULL部分发生了冲突 Oracle就认为违反了的唯一约束

lishixin/Article/program/Oracle/201311/18438
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机玻璃硬度是多少合适 ips屏幕硬度怎么样 手机硬度是什么意思? 2024年拼多多春节发货时间规定是什么?过年还要48小时发货吗? e元素e8100无线鼠标怎么使用 E元素X-8100靠谱吗?可以用几年? E元素X-8100现在有几种配色,哪一种配色好呢? E元素X-8100用的是什么色的轴,适合玩游戏吗? 浙c是哪个城市 浙c是哪里 榻榻米软包怎么安装 情侣空间在电脑上怎么留言 360借条骗人咋办 在中国国际单一窗口注册个人用户信息有危险吗? 很硬的水垢用什么清除 中国的哪个政府被称为北洋政府? 高速超速处罚标准2020 2020年高速超速多少扣分? 智安星怎么换定位图标呀 最大的锡矿和铜镍矿在哪里 河池南丹有多少种矿石? 成龙的净身高多少 成龙有多高 热河在今河北省吗? 激励减肥的句子个人通用80句 有谁知道怎么才能让更多的人加入自己呢? 吸入小麦面粉过多会怎么样? 长期吸面粉有危害吗 有哪些危害 中国古代四大米市是哪里 二级响应是什么 怎么打印测试页?打印机上有三个按键,我该怎么按? 保定环保二级响应什么时间解除 orcal 存储过程 更新数据时,违反唯一约束怎么在存储过程添加异常处理将这条记录删除,然后在继续执行! 陋室铭死了吗 剑与家园维拉加点攻略 奶妈英雄维拉技能分析 维拉为什么不管索伦 剑与家园维拉怎么样?维拉加点定位分析 利物浦和维拉关系 上门女婿结婚流程 倒插门结婚流程 如何清洗你的洗衣机 上海男篮14号球员是谁 任骏威和任骏飞什么关系 兄弟二人的职业发展都很不错 子宫切除后要注意什么 做子宫切除术后注意什么 带有近义词的成语四字成语 墙固怎么施工最好 张一山的身高一直是一个谜题,他究竟有多高 李纯是哪里人 李纯长相不讨喜的原因 写出下列成语的近义词。 创造与魔法树叶怎么弄 顾振宇对方梅为什么那么好