MySQL 触发器示例:根据 AAA 表 ac 字段控制 BBB 表插入操作

本文介绍如何使用 MySQL 触发器,根据 AAA 表的 'ac' 字段值控制对 BBB 表的插入操作。

表结构:

  • aaa 表 包含两个字段:
    • 'ac' BIT(1): 表示是否允许插入到 BBB 表
    • 'un' VARCHAR(45): 唯一标识
  • bbb 表 包含三个字段:
    • 'un' VARCHAR(45): 唯一标识,引用 AAA 表的 'un'
    • 'ct' VARCHAR(45): 其他信息

需求:

当向 bbb 表插入一行时,如果 aaa 表中的 'ac' 为 1,就执行插入,否则就抛出错误信息。

触发器代码:

DELIMITER $$
CREATE TRIGGER bbb_insert_trigger
BEFORE INSERT ON bbb
FOR EACH ROW 
BEGIN
    DECLARE ac_val BIT(1);
    SELECT ac INTO ac_val FROM aaa WHERE un = NEW.un;
    IF ac_val = 1 THEN
        INSERT INTO bbb(un, ct) VALUES(NEW.un, NEW.ct);
    ELSE
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Cannot insert into bbb table, ac value in aaa table is not 1';
    END IF;
END$$
DELIMITER ;

解释:

  • DELIMITER $$DELIMITER ; 用来修改默认的分隔符,因为触发器代码中包含分号。
  • CREATE TRIGGER bbb_insert_trigger 创建一个名为 bbb_insert_trigger 的触发器。
  • BEFORE INSERT ON bbb 表示在插入 BBB 表之前触发。
  • FOR EACH ROW 表示对每个插入的行执行触发器代码。
  • DECLARE ac_val BIT(1); 声明一个变量 ac_val 来存储 AAA 表的 'ac' 字段值。
  • SELECT ac INTO ac_val FROM aaa WHERE un = NEW.un; 查询 AAA 表,找到与插入 BBB 表的 'un' 字段值相同的记录,并将 'ac' 字段值存储到 ac_val 变量中。
  • IF ac_val = 1 THEN 如果 ac_val 等于 1,则执行插入操作。
  • INSERT INTO bbb(un, ct) VALUES(NEW.un, NEW.ct); 将新数据插入 BBB 表。
  • ELSE 如果 ac_val 不等于 1,则抛出错误信息。
  • SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot insert into bbb table, ac value in aaa table is not 1'; 抛出错误信息,并设置 SQLSTATE 为 '45000'。

总结:

本示例展示了如何使用 MySQL 触发器,根据 AAA 表的 'ac' 字段值控制对 BBB 表的插入操作。该触发器可以有效地保证数据完整性,并提供更清晰的错误信息。

MySQL 触发器示例:根据 AAA 表 ac 字段控制 BBB 表插入操作

原文地址: https://www.cveoy.top/t/topic/m03I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录