如何根据其他列值限制 MySQL 中的列值?

how to constrain a column value in MySQL based on other columns values?

以下 table 存储 phone 号码以及使用该 phone 号码的人的姓名:

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

人们可以拥有多个 phone 号码,但只有属于一个人的 phone 个号码中的一个可以作为他们的默认 phone 号码 (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 table 中。