数据库条件索引
在逻辑删除相关的表中,设置普通唯一索引在多个逻辑上已删除的元组中可能发生唯一性冲突,即不允许存在两个相同的已删除元组,同时在存在已删除元组时也不允许插入相同值的新元组。此时可以通过设置条件索引,使唯一索引仅在条件符合时生效(如:仅在逻辑删除置为0,即未删除信息中生效,可达到允许存在多个相同已删除元组,同时允许插入与已删除元组相同的新值)。条件索引在不同数据库中实现如下:
MySQL中的条件索引
条件索引模板:
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(
COLUMN1,
COLUMN2,
COLUMN3,.......
((
CASE
WHEN (索引失效条件) THEN
null ELSE 索引失效条件相关列
END
))) USING BTREE;
条件索引使用实例:
索引生成语句
效果:
已删除的可以存在相同列。
未删除的列存在唯一性约束。
Oracle中的条件索引
条件索引模板:
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(
CASE WHEN (索引成立条件) THEN COLUMN1 END,
CASE WHEN (索引成立条件) THEN COLUMN2 END,
CASE WHEN (索引成立条件) THEN COLUMN3 END,.......)
条件索引使用实例:
索引生成语句
使用效果与MySQL中相同。
达梦数据库中的条件索引可与Oracle使用相同方法实现
SQL Sever中的条件索引
条件索引模板:
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(
COLUMN1,
COLUMN2,
COLUMN3,.......)
where (索引成立条件)
条件索引使用实例:
索引生成语句
使用效果与MySQL中相同。