mysql - 有没有办法强制至少一列不为空

标签 mysql mysql-8.0

我有一个 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,因为我想设置 daydate

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

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

最佳答案

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

我已经使用CHECK(如@Akina建议)为daydate任一表创建了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/

相关文章:

mysql - 查询中的相关计数

MySQL 错误似乎无法修复 : Index column size too large

php - 在 mysql 8 中使用 GROUP BY

php - MYSQL JSON - 如何访问由数字键索引的嵌套 JSON 对象?

mysql - 我使用 yum 安装了 MySQL 8.x,但我无法找到或重置 root 密码

mysql - SQL - 确保一个表中的值与另一表中的适当值相关联的约束

MySQL 在其他表的数组上使用过滤表

mysql - 根据一个不同字段从连接表中选择数据,但返回所有其他列

PHP OOP 和 MySQLi 连接 = fatal error :调用未定义的方法 mysqli::arrayQuery()

mysql - 如何在 Laravel 的 MySQL 8 中永久更改 sql_require_primary_key 值?