博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle唯一约束
阅读量:6857 次
发布时间:2019-06-26

本文共 2149 字,大约阅读时间需要 7 分钟。

 

有重复值还可以唯一约束???都是空值就可以唯一约束??

-----有重复值不能建唯一约束
-----都是空值是可以唯一约束的。

--------------------------------------------------------------------------

--1.如果seq_id预先有重复值(非空的值有重复),是不能加唯一约束的
--2.如果seq_id预先有多个空值(全部记录都是空值也能加),但非空的值都不重复,能加唯一约束
--3.先加唯一约束,再插入seq_id为空的记录,这也是可以的

--如果seq_id不插入空值,但无重复 ,有记录之后再加唯一约束

drop table t_imp_test;
create table t_imp_test(
  seq_id number(10),
  name varchar2(200),
  tel varchar2(200),
  dw  varchar2(200)
);

/*

--3.先加唯一约束,再插入seq_id为空的记录,这也是可以的

alter table t_imp_test add constraint const_t_imp_test_seq_id unique(seq_id);--先加约束

insert into t_imp_test(name,tel,dw)---------------------------------------------执行可以通过

select 'aa' name,'13780001256' tel,'易方达基金公司' dw from dual
union all select 'bb' name,'' tel,'南方基金公司' dw from dual
union all select 'cc' name,'13780001248' tel,'博时基金公司' dw from dual
union all select 'dd' name,'13780008888' tel,'易方达基金公司' dw from dual
;

select * from t_imp_test;

*/

/*

--1.如果seq_id预先有重复值(非空的值有重复),是不能加唯一约束的
insert into t_imp_test(seq_id,name,tel,dw)
select 111 seq_id,'aa' name,'13780001256' tel,'易方达基金公司' dw from dual
union all select 111 seq_id,'bb' name,'' tel,'南方基金公司' dw from dual
union all select 222 seq_id,'cc' name,'13780001248' tel,'博时基金公司' dw from dual
union all select 111 seq_id,'dd' name,'13780008888' tel,'易方达基金公司' dw from dual
;

select * from t_imp_test;

alter table t_imp_test add constraint const_t_imp_test_seq_id unique(seq_id);---执行报错

*/

/*

--2.如果seq_id预先有多个空值,但非空的值都不重复,能加唯一约束
insert into t_imp_test(seq_id,name,tel,dw)
select 222 seq_id,'aa' name,'13780001256' tel,'易方达基金公司' dw from dual
union all select null seq_id,'bb' name,'' tel,'南方基金公司' dw from dual
union all select null seq_id,'cc' name,'13780001248' tel,'博时基金公司' dw from dual
union all select null seq_id,'dd' name,'13780008888' tel,'易方达基金公司' dw from dual
;

select * from t_imp_test;

alter table t_imp_test add constraint const_t_imp_test_seq_id unique(seq_id);---执行通过

insert into t_imp_test(seq_id,name,tel,dw)

select null seq_id,'ee' name,'' tel,'南方基金公司' dw from dual
union all select null seq_id,'ff' name,'13780001248' tel,'博时基金公司' dw from dual---seq_id为空也执行通过
;
*/

转载于:https://www.cnblogs.com/jiangqingfeng/p/9155971.html

你可能感兴趣的文章
Struts2教程8:拦截器概述
查看>>
windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
查看>>
在Foreda8上试安装Apchehttpd-2.4.6.tar.gz
查看>>
基于S3C2410的VIVI移植
查看>>
Entity Framwork one to one problem
查看>>
[转] Attach、Detach和DeleteObject
查看>>
[转] C# 获取程序运行目录
查看>>
【OpenCV学习】极坐标变换
查看>>
[Android Pro] InputStream.skip方法的思考
查看>>
判断页面加载
查看>>
8年前,《西班牙,我为你哭泣。》
查看>>
SVN:服务器资源删掉,本地添加时和删掉的名字同名出现One or more files are in a conflicted state....
查看>>
MySQL数据库遭到攻击篡改---使用备份和binlog进行数据恢复
查看>>
如何在Java中定义常量(Constant)
查看>>
Windows 8实用窍门系列:8.Windows 8 中Slider控件和ToggleSwitch控件
查看>>
在IIS 7.0中架设网站,并用VS2005来调试Web项目
查看>>
白话学习MVC(七)Action的执行一
查看>>
javaweb学习总结(四)——Http协议
查看>>
GridView实战二:使用ObjectDataSource数据源控件
查看>>
C# 视频监控系列(3):客户端——连接服务器并预览
查看>>