使用签入PostgreSQL创建唯一约束
考虑下表:使用签入PostgreSQL创建唯一约束,sql,postgresql,Sql,Postgresql,考虑下表: create table table_1( id serial PRIMARY KEY, col1 varchar(50), col2 varchar(50), status varchar(1) -- A=active P=pending D=Deleted ); 现在我想在(COL1,CO
create table table_1(
id serial
PRIMARY KEY,
col1 varchar(50),
col2 varchar(50),
status varchar(1) -- A=active P=pending D=Deleted
);
现在我想在(COL1,COL2)上创建一个唯一的约束,但是它不应该考虑那些具有状态=“的”,即表中有2行:
INSERT INTO table_1(col1,col2,status) VALUES ('row1', 'row1', 'A');
INSERT INTO table_1(col1,col2,status) VALUES ('row2', 'row2', 'D');
那么我将无法添加以下行:
INSERT INTO table_1(col1,col2,status) VALUES ('row1', 'row1', 'A');
INSERT INTO table_1(col1,col2,status) VALUES ('row2', 'row2', 'A');
但我应该能够添加以下行:
INSERT INTO table_1(col1,col2,status) VALUES ('row1', 'row1', 'A');
INSERT INTO table_1(col1,col2,status) VALUES ('row2', 'row2', 'A');
可以使用部分唯一索引执行此操作:
create unique index id_table1_col1_col2_status on table_1(col1, col2, status)
where status <> 'D';
在表1上创建唯一索引id\u table1\u col1\u col2\u状态(col1,col2,status)
其中状态为“D”;
是一个SQL小提琴,您可以使用它来查看它的工作情况。谢谢。我只需要这样:在状态为“D”的表1(col1,col2)上创建唯一的索引id_table1_col1_col2;我不知道在创建索引时可以使用WHERE。如果
状态为null,那么状态“D”将如何工作?如果它永远不会是null
,那么应该使用notnull
约束来创建它。