【问题标题】:Is there any way to force at least one column NOT NULL有没有办法强制至少一列 NOT NULL
【发布时间】:2019-12-23 06:39:05
【问题描述】:

我有一个 schedule_days 表,其中包含 id, day, date 列。

id - 自动递增,主键
day - weekday - enum(weekdays) 默认不为 null
date -特定日期 - 默认不为空

时刻表是火车时刻表。除了任何特定日期(例如任何节日)外,所有周都将具有相同的例程。因此,我将两者都设置为 null,因为我想设置 daydate

如果指定了日期,那么我可以从中获取日期,所以询问或强制用户设置日期是没有意义的,这可能会导致人为错误。

我可能会使用 TRIGGER,但想知道在 MySQL - 8.0.* 版本中是否有更好的方法

【问题讨论】:

  • SInce date 是一个例外,我会考虑使用一个包含 id,date 的单独表格。
  • @P.Salmon 感谢您的反馈。只需一个查询,该表将由 train 表引用,因此为日期创建另一个表是个好主意?

标签: mysql mysql-8.0


【解决方案1】:

@Akina 的帮助下,我能够解决这个问题。 Hee 是最后的查询。

我使用CHECK(建议@Akina)为daydate 任一表IS NOT NULL 创建了CONSTRAINT

CONSTRAINT day_date_check CHECK ((day IS NOT NULL) OR (date IS NOT NULL))

表格查询

CREATE TABLE IF NOT EXISTS schedule_days
(
    id   INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    day  ENUM ('SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY') DEFAULT NULL,
    date DATE DEFAULT NULL,
    INDEX schedule_day (day),
    CONSTRAINT day_date_check CHECK ((day IS NOT NULL) OR (date IS NOT NULL))
) ENGINE = INNODB;

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2014-04-17
    • 2021-08-07
    • 2014-01-02
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多