sql 服务器 table 的部分值约束
Partial value constraint of sql server table
我有一个 SQL 服务器 table,有两列 id:INT 和 flagged:BOOLEAN。是否可以添加一个约束以确保只有一个条目 (id=a, flagged=b) where b = 1?
例如:
还行
(id=1, flagged=1)
(id=1, flagged=0)
(id=1, flagged=0)
不好
(id=1, flagged=1)
(id=1, flagged=1)
(id=1, flagged=0)
使用过滤器创建唯一索引:
CREATE UNIQUE INDEX idx_name ON your_table(id)
WHERE flagged=1;
演示:
CREATE TABLE your_table(id INT, flagged INT);
CREATE UNIQUE INDEX idx_name ON your_table(id)
WHERE flagged=1;
INSERT INTO your_table(id, flagged)
VALUES (1, 0), (1,1), (1,0);
INSERT INTO your_table(id, flagged) -- will fail
VALUES (1,1);
/* Cannot insert duplicate key row in object 'dbo.your_table'
with unique index 'idx_name'. The duplicate key value is (1).*/
我有一个 SQL 服务器 table,有两列 id:INT 和 flagged:BOOLEAN。是否可以添加一个约束以确保只有一个条目 (id=a, flagged=b) where b = 1?
例如:
还行
(id=1, flagged=1)
(id=1, flagged=0)
(id=1, flagged=0)
不好
(id=1, flagged=1)
(id=1, flagged=1)
(id=1, flagged=0)
使用过滤器创建唯一索引:
CREATE UNIQUE INDEX idx_name ON your_table(id)
WHERE flagged=1;
演示:
CREATE TABLE your_table(id INT, flagged INT);
CREATE UNIQUE INDEX idx_name ON your_table(id)
WHERE flagged=1;
INSERT INTO your_table(id, flagged)
VALUES (1, 0), (1,1), (1,0);
INSERT INTO your_table(id, flagged) -- will fail
VALUES (1,1);
/* Cannot insert duplicate key row in object 'dbo.your_table'
with unique index 'idx_name'. The duplicate key value is (1).*/