mysql - 触发和信号逻辑

标签 mysql

我正在为 DB 类(class)构建 jail 管理数据库,并且正在开发一个触发器,以便在囚犯刑期的开始日期和结束日期不正确时拒绝插入。

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

这是我的想法,我不知道我是否正确使用了 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'

最佳答案

SIGNAL 的这种用法很好。

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

首先使用DROP TRIGGER

关于mysql - 触发和信号逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23506765/

相关文章:

mysql - #2003 - 无法连接到 'localhost' 上的 MySQL 服务器 (10061)

php - 设置实体 OneToOne

MYSQL如何限制join的结果

php - Codeigniter 使用外部文件替换database.php

mysql - ORM: Sequelize :为两列添加不相等约束

python - MySQLdb 错误 : 'Unknown Database Python' using MySQL Workbench

mysql - 需要连接 2 个表,但 MySQL 中另一个表中的某些行除外

mysql - 从边界坐标列创建mysql多边形列

mysql - 使用 Hibernate 在 MySQL 时间戳列中存储毫秒数

java - 如何在 Hibernate 中复制 "SHOW TABLES"?