用mysql写一个触发器当a更新s=2之后插入一行新的当a插入一行之后更新b表a=1
前提:假设存在两个表a表和b表,a表有id和s两个字段,b表有id和a两个字段。
创建a表:
CREATE TABLE a (
id int(11) NOT NULL AUTO_INCREMENT,
s int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
创建b表:
CREATE TABLE b (
id int(11) NOT NULL AUTO_INCREMENT,
a int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
创建触发器:
DELIMITER $$
CREATE TRIGGER trigger_a AFTER UPDATE ON a FOR EACH ROW
BEGIN
IF NEW.s = 2 AND OLD.s != 2 THEN
INSERT INTO b(a) VALUES (NEW.id);
END IF;
END$$
CREATE TRIGGER trigger_b AFTER INSERT ON a FOR EACH ROW
BEGIN
UPDATE b SET a = 1 WHERE id = NEW.id;
END$$
DELIMITER ;
说明:
-
触发器
trigger_a是在a表更新之后触发的,判断如果s字段的值为2并且之前的值不为2,则插入一行新的数据到b表中,a字段的值为NEW.id。 -
触发器
trigger_b是在a表插入一行数据之后触发的,将b表中id为NEW.id的记录的a字段更新为1。
测试:
插入一行数据到a表中:
INSERT INTO a(s) VALUES (3);
执行后,b表中没有新增记录。
将a表中s字段的值更新为2:
UPDATE a SET s = 2 WHERE id = 1;
执行后,b表中新增一行记录,a字段的值为1。
再次将a表中s字段的值更新为2:
UPDATE a SET s = 2 WHERE id = 1;
执行后,b表中没有新增记录。
将a表中id为1的记录删除:
DELETE FROM a WHERE id = 1;
执行后,b表中id为1的记录也会被删除。
原文地址: https://www.cveoy.top/t/topic/bfKp 著作权归作者所有。请勿转载和采集!