oracle唯一约束

 

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

--------------------------------------------------------------------------
--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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值