PHP mysql 条件唯一约束?

PHP mysql conditional unique constraint?

如何让一个列只包含 x 个类似的字符串条目?

示例:

------------
| room_type|
|----------|
| premium  |
| premium  |
| premium  |
| premium  |
| premium  |

如果有不同类型的条目,它也只会接受 x 数量的条目。

这不能用约束来完成。您可以为此编写 before 触发器。

插入触发器:

delimiter $$
create trigger my_insert_trigger before insert on my_table
for each row
begin
    if (select count(*) from my_table where room_type = new.room_type) > 5 then
        signal sqlstate '45000';
    end if;
end;
$$
delimiter ;

更新触发器:

delimiter $$
create trigger my_update_trigger before update on my_table
for each row
begin
    if (select count(*) from my_table where room_type = new.room_type) > 5 then
        signal sqlstate '45000';
    end if;
end;
$$
delimiter ;

Demo on DB Fiddle:

触发器引发错误:

Error: ER_SIGNAL_EXCEPTION: Unhandled user-defined exception condition