Mysql 触发器

触发器:
   mysql中的触发器类似于js中的事件.事先为某张表绑定好一段代码,
   当表中的某些内容发生改变的时候(增删改)系统会自动触发代码执行
 1.触发器的关键字: trigger
 2.触发器的类型: insert delete update
 3.触发器的触发时间: before after
 4.触发器的对象: 表中的每一行记录
 5.一张表中最多有6个触发器: 这是由触发类型和触发时间决定的
 6.触发器是自动触发的
  
 7.触发记录:
    不管触发器是否触发了,只要当某种操作准备执行,
  系统就会将当前要操作的记录的当前状态和即将执行之后的状态给分别保留下来,供触发器使用;
   要操作的当前状态保存到old中,操作之后的可能形态保存给new.
  
  8.触发器记录中old和new关键字代表:
     old: 旧记录 new 新记录
     删除的时候没有new 插入的时候没有old
    
 9.触发器的优点和缺点:
     优点: 可以很好的协调表内部的数据处理顺序和关系
     缺点: 触发器会增加数据库维护的难度,尽量少用

(1)作用: 多张相关联的表,达到数据同步

(2)操作表 被操作表
我们为操作表添加触发器,当我们为操作表进行更新时(增删改),达到某个条件时,就会触发事件(sql语句集)并执行事件.

创建触发器

delimiter ;;  
create trigger 触发器名称
after/before        (触发器工作的时机)
update/delete/insert  (触发器监听事件)
on 表名               (触发器监听的目标表)
for each row    (行级监视,mysql固定写法,oracle不同)
begin
  sql语句集........(触发器执行动作,分号结尾)
end ;;    结束限定符

(3)删除触发器: drop trigger if exist 触发器名称

(4)查询数据库触发器:show triggers;

1.在终端建库建表

<!--建库-->
create database if not exists has character set utf8 collate utf8_general_ci;
       character set utf8: 字符集
       collate utf8_general_ci:校队集
<!--建表-->
    <!--操作表-->
create table if not exists depart 
   (id Integer primary key auto_increment, 
    name varchar(20))charset=utf8;
    <!--被操作表-->
 create table if not exists person 
    (id Integer primary key auto_increment,
       name varchar(20),
       departname varchar(30))charset =utf8;

2.监听器监听:update

  delimiter ;;
  create  trigger zs 
  after
  update 
  on depart
  for each row
  begin
    update person set departname = NEW.name where departname = OLD.name;
  end ;;

 delimiter ;
   update depart set name = '佛香阁' where name = '青云门';

2.监听器监听:delete

 delimiter ;;
 create trigger zz
 after
 delete
 on depart
 for each row
 begin
   update person set departname = NULL where departname = OLD.name;
 end ;;

delimiter ;
  delete from depart where name = '佛香阁';

3.监听器监听:insert

 delimiter ;;
  create trigger ss
  after
  insert
  on depart
  for each row
  begin
     update set departName = NEW.name where departname is NULL;
   end ;;

delimiter ;
  insert into depart (name) values ('天下会');
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值