ORACLE 忽略已有重复值 创建唯一约束
常有一些特殊情况,需要在表中保留违反唯一约束的数据,一般先drop唯一约束与索引再insert into,这样就需要在表中忽略已有重复值,重建唯一约束
---------------------------------------------------------------------------------------------------
1.创建非唯一索引
CREATE INDEX INDEX_NAME ON TABLE_NAME(XXX);
2.创建唯一约束(disable novalidate)
ALTER TABLE TABLE_NAME ADD CONSTRAINT XXX UNIQUE (XXX) DISABLE NOVALIDATE;
3.启用唯一约束(enable novalidate)
ALTER TABLE TABLE_NAME ENABLE NOVALIDATE CONSTRAINT XXX ;
--------------------------------------------------------------------------------------------------
以下对约束的四种状态说明
enable validate :无法输入违反约束的行,而且表中所有行都要符合约束
enable novalidate :表中可以存在不合约束的状态,,但对新加入数据必须符合约束条件.
disable novalidate :可以输入任何数据,表中或已存在不符合约束条件的数据.
disable validate :不能对表进行插入/更新/删除等操作,相当于对整个表的read only设定.