Mysql
有沒有辦法強制至少一列 NOT NULL
我有一個
schedule_days
有id, day, date
列的表。id - 自動遞增,主鍵
day - weekday - enum(weekdays) 預設不為空
date - 特定日期 - 預設不為空
時刻表是火車時刻表。除了任何特定日期(例如任何節日)外,所有周都將具有相同的常式。因此,我將兩者都設置為 null ,因為我想設置其中一個
day
ordate
。如果指定了日期,那麼我可以從中獲取日期,因此詢問或強制使用者設置日期是沒有意義的,這可能會導致人為錯誤。
我可能會使用TRIGGER但想知道在**MySQL 中是否有更好的方法 - 8.0.***版本
表查詢
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 staff_index (day), CONSTRAINT day_day_check CHECK (`day` IS NULL + `date` IS NULL = 1) # check constraint ) ENGINE = INNODB;
如果您使用 8.0.16 或更高版本,請使用CHECK 約束。
就像是
CHECK COALESCE(`day`, `date`) IS NOT NULL
對於“至少一個不為空”,或
CHECK `day` IS NULL + `date` IS NULL = 1
因為“強烈一不為空”。
在@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;