正在尝试创建mySQL触发器

jv4diomz  于 2022-10-31  发布在  Mysql
关注(0)|答案(1)|浏览(220)

以下是我的表信息:
表HOTEL具有属性hotelid、address、manager name、number rooms、facilities,该表具有主键hotelid,该主键是AUTOINCREMENT类型。
具有属性编号、类型、占用率、床位数、床位类型、价格、酒店ID的ROOM表具有主键(酒店ID、编号),并且酒店ID是HOTEL的外键。
具有属性hotelid、cust id、room number、begin date、end date、credit card number、exp date的表RESERVATION具有主键(hotelid、cust id、room number、begin date),并且(hotelid、room number)是HOTEL的外键。
已更新

DELIMITER //
CREATE TRIGGER GoodRoom
BEFORE INSERT ON room
FOR EACH ROW
BEGIN
    IF NEW.type NOT IN ('regular','extra', 'suite', 'business','luxury','family') THEN SIGNAL SQLSTATE '45000' SET MESSAGE TEXT 
END IF;
DELIMITER ;
cld4siwp

cld4siwp1#

错误:

IF NEW.type != ('regular','extra', 'suite', 'business','luxury','family') THEN ...

右边:

IF NEW.type NOT IN ('regular','extra', 'suite', 'business','luxury','family') THEN ...

看起来你的条件很简单。假设你使用的是MySQL 8.0.16或更高版本,你应该考虑使用CHECK constraints而不是触发器。
此外,如果使用SIGNAL引发用户定义得错误,则SQLSTATE应为'45000'.
https://dev.mysql.com/doc/refman/8.0/en/signal.html表示:
若要发出一般SQLSTATE值的信号,请使用'45000',表示“未行程的使用者定义例外状况”。

相关问题