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

问题描述 投票:0回答:1

我尝试创建一个表格,其中'dateFrom'和'dateTo'字段需要高于今天的日期。所以我用这样的CHECK

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`

我曾多次在Google上搜索过这个问题,但仍无法找到方法。

mysql sql database mariadb
1个回答
1
投票

在MySQL文档中,

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

https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html

所以我使用了这样的触发器,

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
© www.soinside.com 2019 - 2024. All rights reserved.