mysql - 有没有办法强制至少一列 NOT NULL
问题描述
我有一个schedule_days
有id, day, date
列的表。
id - 自动递增,主键
day - weekday - enum(weekdays) 默认不为空
date - 特定日期 - 默认不为空
时刻表是火车时刻表。除了任何特定日期(例如任何节日)外,所有周都将具有相同的例程。因此,我将两者都设置为 null ,因为我想设置其中一个day
or date
。
如果指定了日期,那么我可以从中获取日期,因此询问或强制用户设置日期是没有意义的,这可能会导致人为错误。
我可能会使用TRIGGER但想知道在MySQL 中是否有更好的方法 - 8.0.*版本
解决方案
在@Akina的帮助下,我能够解决这个问题。熙是最后的询问。
我已经CONSTRAINT
使用CHECK
(如@Akina建议的那样)创建了day
任一date
表IS 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;
推荐阅读
- jquery - 使用 laravel 8 在单选按钮和下拉菜单中显示数据
- sql - SQL如何批量更新
- python - 如何从 yaml 文件中删除文本“!!omap”?
- c - 当我从 GCC 9.2 升级到 10.2 时,为什么 acos(10.0) 停止将 errno 设置为 EDOM?
- jsf - 按条件显示 JSF dataTableColumn 中的数据
- c++ - 迭代向量不会更新对象
- amazon-redshift - 在与平均值相同的查询中使用中位数聚合?
- r - 如何将函数应用于矩阵数组并获得相同形式的输出(矩阵数组)
- flutter - 如何更改 CupertinoPageTransitionsBuilder 的持续时间?
- typescript - expo + jest:无法对包含来自@expo/vector-icons/MaterialIcons 图标的组件运行测试