我尝试创建一个表,其中“ 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文档中,
允许使用文字,确定性内置函数和运算符。如果给定表中的相同数据,则独立于所连接的用户,如果多次调用产生相同的结果,则该函数为确定性函数。不确定性且未通过此定义的函数示例:CONNECTION_ID(),CURRENT_USER(),NOW()。
https://dev.mysql.com/doc/refman/8.0/zh-CN/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