MySQL 触发器示例:根据 AAA 表 ac 字段控制 BBB 表插入操作
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 表的插入操作。该触发器可以有效地保证数据完整性,并提供更清晰的错误信息。
原文地址: https://www.cveoy.top/t/topic/m03I 著作权归作者所有。请勿转载和采集!