Mysql 如何在check子句中使用CURDATE()?

Mysql 如何在check子句中使用CURDATE()?,mysql,sql,database,mariadb,Mysql,Sql,Database,Mariadb,我尝试创建一个表,其中“dateFrom”和“dateTo”字段需要高于今天的日期。所以我用这种支票 CREATE TABLE Booking ( hotelNo int(10), guestNo int(10), dateFrom datetime, dateTo datetime, roomNo int(10), CHECK (dateFrom >= CURDATE() AND dateTo >=

我尝试创建一个表,其中“dateFrom”和“dateTo”字段需要高于今天的日期。所以我用这种支票

CREATE TABLE Booking (
       hotelNo int(10),
       guestNo int(10),
       dateFrom datetime,
       dateTo datetime,
       roomNo int(10),
       CHECK (dateFrom >= CURDATE() AND dateTo >= CURDATE())
);
但我总是犯这个错误

  ERROR 1901 (HY000): Function or expression 'curdate()' cannot be used in the CHECK clause of `CONSTRAINT_1`

我已经在谷歌上搜索过很多次了,但仍然找不到一种方法来实现它。

在MySQL文档中

允许使用文字、确定性内置函数和运算符。如果给定表中相同的数据,多个调用产生相同的结果,而与连接的用户无关,则函数是确定的。不确定且未通过此定义的函数示例:CONNECTION_ID()、CURRENT_USER()、NOW()

所以我用了这样的触发器

CREATE TRIGGER date_check
BEFORE INSERT ON Booking
FOR EACH ROW
BEGIN
IF NEW.dateFrom <= CURDATE() OR NEW.dateTo <= CURDATE() THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid date!';
END IF;
END
创建触发日期\u检查
在预订前插入
每行
开始

如果NEW.date来自哪个版本的MySQL?我使用的是10.3.13-MariaDB版本CHECK本身工作得很好,但在CHECK中使用CURDATE()时存在问题。CHECK表达式必须始终接受您的表数据。所以你不能使用一个随时间变化而不永久的表达式。您可以使用触发器来确保插入的数据,实际上这可能就是我想要的答案,谢谢!MariaDB也这么说吗?(好像是
CHECK
是他们分歧的地方。)我想是的。我使用MariaDB并且
检查
工作正常。MySQL文档中提到了这些约束。