Reference
MySQL触发器Trigger实例篇
mysql 中一个表可以建两个触发器吗?
Notes
- 用触发器可以实现表间数据的同步更新,在修改一个表后要连带修改一系列相关的表,可以用触发器实现;
- 在同一个表中,同类事件、且同个动作时间的触发器只能有一个。如对于表
table_1,只能有一个after update,但能同时存在before update和after update,也能同时存在after insert和after delete(见第二个链接里的回答); - 创建 trigger 时,需要先暂时将
delimiter(界定符?结束符?)从默认的;改成其它的,如/,因为 trigger 里会有 SQL 语句,要用到;,要避免它被认为是结束符; - 此例中每次创建 trigger 前都修改了
delimiter,创建完又改回去(因为代码片是分开的),实际中可以先改一次,然后一次性创建完所有 trigger,再把delimiter改回来; - MySQL 5.7.16 下测试通过
Example
Table
- 实现两个表:
teacher和user的同步更新 teacher表字段:
- Tid,Teahcer ID,主键
- Tpsw,Teacher Password
CREATE TABLE teacher (
Tid VARCHAR(30) PRIMARY KEY,
Tpsw VARCHAR(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
user表字段:
- Uid,User ID,主键
- Upsw,User Password
CREATE TABLE user (
Uid VARCHAR(30) PRIMARY KEY,
Upsw VARCHAR(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
teacher表的Tid字段与user表的Uid字段对应、Tpsw与Upsw对应
Trigger
- 触发器
insert_teacher,实现在teacher插入记录后,将新加的记录添加到user表中
DELIMITER /
CREATE TRIGGER insert_teacher
AFTER INSERT ON teacher
FOR EACH ROW
BEGIN
INSERT user(Uid, Upsw) VALUES(NEW.Tid, NEW.Tpsw);
END
/
DELIMITER ;
- 触发器
update_teacher,实现在修改teacher表中一条记录的Tid或Tpsw后,在user表中做出相应修改
DELIMITER /
CREATE TRIGGER update_teacher
AFTER UPDATE ON teacher
FOR EACH ROW
BEGIN
IF NEW.Tid != OLD.Tid OR NEW.Tpsw != OLD.Tpsw THEN
UPDATE user SET Uid = NEW.Tid, Upsw = NEW.Tpsw WHERE Uid = OLD.Tid;
END IF;
END
/
DELIMITER ;
- 触发器
delete_teacher,实现删除teacher表中的记录后,在user中删除相应记录
DELIMITER /
CREATE TRIGGER delete_teacher
AFTER DELETE ON teacher
FOR EACH ROW
BEGIN
DELETE FROM user WHERE Uid = OLD.Tid;
END
/
DELIMITER ;
本文介绍MySQL触发器的应用案例,包括创建触发器以实现表间数据同步更新的方法。具体讲解了如何使用触发器来同步更新两个相关联的表,并提供了详细的SQL语句。
1307

被折叠的 条评论
为什么被折叠?



