【问题标题】:how to constrain a column value in MySQL based on other columns values?如何根据其他列值约束 MySQL 中的列值?
【发布时间】:2021-08-30 15:30:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mysql sql mariadb constraints


    【解决方案1】:

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

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

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

    也就是说,我实际上建议将默认编号存储在存储名称的persons 表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2018-09-24
      • 2021-01-27
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多