触发和信号逻辑

时间:2014-05-07 00:31:29

标签: mysql

我正在为数据库课程建立监狱管理数据库,如果囚犯判刑的开始日期和结束日期不正确,我正在制作一个拒绝插入的触发器。

我知道有更好的方法可以做到这一点,但我需要使用触发器。

这是我提出的问题,我不知道我是否正确使用了SIGNAL功能:

CREATE TRIGGER `Prisoner_Date_Check` BEFORE INSERT ON `Prisoner`
    FOR EACH ROW begin
    if (new.sentence_end-new.sentence_start) < 0 then
        SIGNAL sqlstate '12345'
            SET MESSAGE_TEXT = 'Incorrect Prisoner.start_date or Prisoner.end_date';
    END IF;
    if new.sentence_end < current_date then
        SIGNAL sqlstate '12345'
            SET MESSAGE_TEXT = 'Incorrect Prisoner.end_date, less than current_date';
    END IF;
    if new.sentence_start > current_date then
        SIGNAL sqlstate '12345'
            SET MESSAGE_TEXT = 'Incorrect Prisoner.start_date, greater than current_date';
    end if;
END$$

当我运行脚本时,我收到此错误。

Error Code: 1235. This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

1 个答案:

答案 0 :(得分:0)

SIGNAL的这种用法很好。

这里失败的是CREATE TRIGGER,因为已为同一事件的同一个表定义了另一个触发器。

首先使用DROP TRIGGER