我有一个需要约束的牌桌,当用户的卡处于ACTIVE或LOCKED状态时,不应创建新卡。
CREATE TABLE card (cardId int, userId int, cardState varchar(255));
我尝试使用要点排除和部分唯一索引探索排除,但没有任何进展。如有任何帮助,将不胜感激。
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
1条答案
按热度按时间nzk0hqpo1#
使用条件式唯一条件约束/索引: