我有一个 schedule_days
表,其中包含 id、day、date
列。
id - auto increment, primary key
day - weekday - enum(weekdays) default not null
date - a specific date - default not null
时间表是火车时刻表。除了任何特定日期(例如任何节日)之外,所有几周都会有相同的例程。因此,我将两者设置为 null,因为我想设置 day
或 date
。
如果指定了日期,那么我可以从中获取日期,因此询问或强制用户设置日期是没有意义的,这可能会导致人为错误。
我可能会使用TRIGGER,但想知道在MySQL - 8.0.*版本中是否有更好的方法
最佳答案
在@Akina的帮助下我能够解决这个问题。嘿,这是最终的查询。
我已经使用CHECK
(如@Akina建议)为day
和date
任一表创建了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;
关于mysql - 有没有办法强制至少一列不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451101/