如何根据其他列值限制 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 中。
以下 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 中。