MySQL Trigger(触发器)简例

Reference

MySQL触发器Trigger实例篇
mysql 中一个表可以建两个触发器吗?

Notes

  • 用触发器可以实现表间数据的同步更新,在修改一个表后要连带修改一系列相关的表,可以用触发器实现;
  • 在同一个表中,同类事件、且同个动作时间的触发器只能有一个。如对于表table_1,只能有一个after update,但能同时存在before updateafter update,也能同时存在after insertafter delete(见第二个链接里的回答);
  • 创建 trigger 时,需要先暂时将delimiter(界定符?结束符?)从默认的;改成其它的,如/,因为 trigger 里会有 SQL 语句,要用到;,要避免它被认为是结束符;
  • 此例中每次创建 trigger 前都修改了delimiter,创建完又改回去(因为代码片是分开的),实际中可以先改一次,然后一次性创建完所有 trigger,再把delimiter改回来;
  • MySQL 5.7.16 下测试通过

Example

Table

  • 实现两个表:teacheruser的同步更新
  • teacher表字段:
    1. Tid,Teahcer ID,主键
    2. Tpsw,Teacher Password
CREATE TABLE teacher (
    Tid VARCHAR(30) PRIMARY KEY,
    Tpsw VARCHAR(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • user表字段:
    1. Uid,User ID,主键
    2. 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字段对应、TpswUpsw对应

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表中一条记录的TidTpsw后,在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 ;
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值