比如我的表包括
UserID,FailFlag
FailFlag表示这条数据是否失效,当FailFlag标为1这条数据失效,但为了以后查询仍在数据库中保留此数据,我想保证所有FailFlag=0的UserID复合唯一性约束,而且FailFlag=1的UserID有多少条重复都没关系,这种情况下用联合主键达不到唯一约束,请问有什么办法?
UserID,FailFlag
FailFlag表示这条数据是否失效,当FailFlag标为1这条数据失效,但为了以后查询仍在数据库中保留此数据,我想保证所有FailFlag=0的UserID复合唯一性约束,而且FailFlag=1的UserID有多少条重复都没关系,这种情况下用联合主键达不到唯一约束,请问有什么办法?
SQL> create table t(user_id int, fail_flag number(1));表已创建。SQL> create unique index idx_t_user_id_flag on t(case when fail_flag=1 then null else user_id end, case when fail_flag=1 then null else fail_flag end);索引已创建。SQL> insert into t values(1, 1);已创建 1 行。SQL> insert into t values(1, 0);已创建 1 行。SQL> insert into t values(1, 0);
insert into t values(1, 0)
*
ERROR 位于第 1 行:
ORA-00001: 违反唯一约束条件 (SCOTT.IDX_T_USER_ID_FLAG)
SQL> insert into t values(1, 1);已创建 1 行。SQL> insert into t values(1, 1);已创建 1 行。SQL> select * from t; USER_ID FAIL_FLAG
---------- ----------
1 1
1 0
1 1
1 1
这个还有必要吗?我也刚刚查到解决方法
CREATE UNIQUE INDEX IDX_TEST ON table(DECODE(FailFlag,0,UserID))