postgresql POSTGRES:在行上添加约束条件

gdx19jrr  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(136)

我有一个需要约束的牌桌,当用户的卡处于ACTIVE或LOCKED状态时,不应创建新卡。

CREATE TABLE card
(cardId int,
userId int,
cardState varchar(255));

我尝试使用要点排除部分唯一索引探索排除,但没有任何进展。如有任何帮助,将不胜感激。

nzk0hqpo

nzk0hqpo1#

使用条件式唯一条件约束/索引:

CREATE TABLE card
(cardId int,
userId int,
cardState varchar(255)); 

CREATE UNIQUE INDEX u_user_id_card_state ON card(userId) WHERE cardState IN('ACTIVE','LOCKED');

INSERT INTO card(cardid, userid, cardstate) VALUES(1,1, 'ACTIVE');

INSERT INTO card(cardid, userid, cardstate) VALUES(1,1, 'ACTIVE'); -- fails

INSERT INTO card(cardid, userid, cardstate) VALUES(1,1, 'LOCKED'); -- fails

INSERT INTO card(cardid, userid, cardstate) VALUES(1,1, 'something else'); -- works

相关问题