回答

收藏

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

技术问答 技术问答 260 人阅读 | 0 人回复 | 2023-09-12

我试 dateFrom”和“ dateTo字段必须高于今天的日期。所以我这样用CHECK- x: H% [& \: D
CREATE TABLE Booking (        hotelNo int(10),      guestNo int(10),      dateFrom datetime,      dateTo datetime,      roomNo int(10),      CHECK (dateFrom >= CURDATE() AND dateTo >= CURDATE()));但我一直收到这个错误
3 n+ h+ b; ?0 z9 J: r8 k, Q        ERROR 1901 (HY000): Function or expression 'curdate()' cannot be used in the CHECK clause of `CONSTRAINT_1`我已经在Google搜索了很多次,还是找不到解决办法。% [/ z2 O8 J; W9 k7 Y
                                                                " v! u- d1 g# w
    解决方案:                                                                2 N. f: @8 e: I
                                                                在MySQL文档中,7 V- Y- D$ }  T( P' [0 {5 H
允许使用文本、确定性内置函数和操作符。如果给定表中的相同数据独立于连接的用户,如果多次呼叫产生相同的结果,则该函数为确定性函数。不确定性和未定义的函数示例:CONNECTION_ID(),CURRENT_USER(),NOW()。7 _) Z2 B) e0 S6 i( E8 c6 ~* S
https://dev.mysql.com/doc/refman/8.0/zh-CN/create-table-check-  u8 }  \7 L+ k) _# i
constraints.html
$ z; k) k! J7 u& F: K+ Y2 t/ r所以我改用了这样的触发器,
$ [3 _  y% Q+ Q# MCREATE TRIGGER date_checkBEFORE INSERT ON BookingFOR EACH ROWBEGINIF NEW.dateFrom <= CURDATE() OR NEW.dateTo <= CURDATE() THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid date!';END IF;END
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则