首页 > 解决方案 > 有没有办法强制至少一列 NOT NULL

问题描述

我有一个schedule_daysid, day, date列的表。

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

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

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

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

标签: mysqlmysql-8.0

解决方案


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

我已经CONSTRAINT使用CHECK(如@Akina建议的那样)创建了day任一dateIS NOT NULL

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;

推荐阅读