前提:假设存在两个表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 ;

说明:

  1. 触发器trigger_a是在a表更新之后触发的,判断如果s字段的值为2并且之前的值不为2,则插入一行新的数据到b表中,a字段的值为NEW.id。

  2. 触发器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的记录也会被删除。

用mysql写一个触发器当a更新s=2之后插入一行新的当a插入一行之后更新b表a=1

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

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