mysql - 如何修复此 MySQL 触发器语句?

标签 mysql database triggers

找不到问题,已经尝试了一段时间了

CREATE
    TRIGGER `checkin_enforcement` BEFORE INSERT
    ON `booking` 
    FOR EACH ROW BEGIN

        IF (NEW.checkinDate < NEW.checkoutDate) THEN
            INSERT INTO booking (bookingID, hotelNo, guestNo, checkinDate, checkoutDate, roomNo) VALUES (NEW.bookingID, NEW.hotelNo, NEW.guestNo, NEW.checkinDate, NEW.checkoutDate, NEW.roomNo);

        ELSE
            signal sqlstate '45000' set message_text = 'The checkin date must be less than the checkout date!';
        END IF;


    END$$

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 7 行 '' 附近使用的正确语法

最佳答案

如果条件通过,则无需插入该行。您只需要在没有发生错误时抛出错误即可。

此外,我将插入时更改为插入或更新时,因为即使在将数据插入表中之后,您可能也希望保持此规则的强制执行。如果没有,只需将其更改为 on insert

试试这个:

delimiter $$

create trigger checkin_enforcement 
before insert or update on booking
for each row 
begin
    if (new.checkindate >= new.checkoutdate) then
        signal sqlstate '45000' set message_text = 'the checkin date must be less than the checkout date!';
    end if;
end$$

关于mysql - 如何修复此 MySQL 触发器语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43197947/

相关文章:

mysql - SQL表创建以节省多点之间的距离

sql - 使用触发器的 PostgreSQL 审计历史

mysql - 从 MySQL 数据库中删除第一行

mysql - 合并两个查询而不遗漏行

sql - 使用一个查询更新多行

php - 如何从两个源表单和其他表插入mysql数据

php - 如何在php中插入mysql数据以使用Buk Sms Api发送短信

android - 发送值位置在 10 分钟后继续

jquery-ui - 以编程方式将项目从一个可排序连接列表移动到另一个

mysql - 我的触发语句有问题吗?