oracle唯一索引和条件约束问题

有个问题就是一个表的一个字段和另外一个字段=Y的值组合起来不能重复,数据能配置这种约束吗?
比如
create table aa (
id char(2),
dlt_flag char(1)
)
要求id相同,dlt_flag=Y的值只能有一个
在说明一下问题,上面描述的可能不太清楚,联合主键不能实现的,就比如上面的表,
dlt_flag 代表状态标识,只可以取Y、N,Y-正常,N-废弃,本表中同一个ID为Y的值只能有一条,为N的值可以有多条。比如下面值是合理的
(1,Y)
(1,N)
(1,N)
当插入下面3组值时不合法
(1,Y)
(1,N)
(1,Y)
在代码里面可以控制,就是不知道数据库有没有机制,直接可以控制这种约束

第1个回答  推荐于2017-10-10
我想不仅仅是Oracle,其他数据库也一样的,Unique约束和Primary key约束用来保证同一表中指定的列上没有重复值,这两个约束都产生唯一索引确保数据一致性,默认情况下,Unique约束产生唯一的非聚集索引,Primary key约束产生唯一的聚集索引。Primary key约束比Unique约束严格:Primary key列不允许有空值,Unique列允许有空值。本回答被网友采纳
第2个回答  2017-10-10
create unique index unique_index01 on aa(id,dlt_flag);
把这句话,在SQL/PLUS中执行一下,然后再看看是否好用。
第3个回答  2015-12-03
建立唯一索引
建在id 和 dit_flag上
第4个回答  2019-07-25
create unique index conditional_unique_idx on aa( decode( dlt_flag , 'Y' , id , null) )
第5个回答  2019-07-08
create unique index idx on aa(case when dlt_flag='Y' then id end)
相似回答