如何约束MySQL中基于其他列值的列值?



下表存储电话号码和使用该电话号码的人的姓名:

CREATE TABLE phone_numbers (
phone_number VARCHAR(12) PRIMARY KEY,
name TINYTEXT,
default_number BOOLEAN
);

每个人可以有多个电话号码,但只有一个属于一个人的电话号码可以是他们的默认电话号码(deafault_number = 1)

如何编写约束来强制每个人只能有1个default_number=1?

可以使用唯一索引。在大多数数据库中,这将是一个经过过滤的惟一索引。在MySQL中,它使用表达式:

create unique index unq_phone_numbers_name on
phone_numbers(case when boolean then name end);

唯一索引允许多个NULL值。但是一个给定的名字只能有一个数字。

也就是说,我实际上建议将默认数字存储在persons表中,其中存储了名称。

最新更新