触发器

触发器:
概念:
触发器是一种特殊类型的存储过程,在满足定义条件操作时触发,并自动执行触发器中预先设定好的定义的语句集合。
1、触发器是特殊的存储过程
2、触发器是在对表操作时,满足条件就科一自动调用预先编译的sql语句

触发器是个被动技能:被动技能就是提前编译好触发条件达成触发条件自动释放


好处:
1、安全性:可以基于数据库的值使用户具有操作数据库的某种权限
2、审计:可以跟踪用户对数据库的操作  例如:消费之后,银行会给我们发信息
3、实现复杂的数据完整性规则
4、提供了云星计划任务的另一种方式


创建语句
  关键字:trigger

eg:回村之后——隔离十四天
    触发对象——村
    触发时间——之后
    触发事件——回村
    触发操作——隔离十四天

create trigger 触发器名
after|before#触发时间
insert|update|delete #触发事件
on 表名 #触发对象
for each row #针对表中每一条数据都会触发
#表示任何一条记录上的操作满足触发事件都会触发该触发器
begin
    SQL操作;
end

注意:
  1、触发器 tr_XXX
  2、触发时机:after |before 
     before 触发事件之前  回村前
     after  触发事件之后  回村后
  3、触发事件--因为什么事触发
     insert update delete ——DML
     DQL 数据查询语句
  4、处罚对象就是表,也就以为,触发器是建立在标上的
  5for each orw
#表示任何一条记录上的操作满足触发条件都会触发该触发器

t_villager 村员表
r_record 疫情防护记录表

1、创建触发器,在村民回村之后,在记录表中新增相应记录,其中处理方案为在家隔离14天

村民表
村民回村——新增一条数据 四年增操作
之后——之后触发器
村民回村之后等价于 创建的后置触发器
删除触发器


#因为新增没有写列名
create trigger tr_addCM
after insert #回村之后
on t_villager
for each row
begin
  #在记录表中新增相应记录,其中处理方案为在家隔离14天
  insert into t_record values(new.vname,new.vphone,new,vaddress,'河南信阳','大铁钩子村','在家隔离14天',now());
#需要在新增时获取  新增的数据值,它存放在new表
end
#添加测试数据
insert into t_villager values('李云龙','大铁钩子亮剑街1号','123456789');


drop trigger tr_addCM
2、创建触发器,在村民回村时


select now();





第一题
0、拖入数据库文件 Mystar mystarclass
1、创建触发器,当新增完成后更新所在班级的人数
2、穿件触发器,当修改姓名后将就名字和新名字添加到修改记录表中
3、创建触发器,当删除完成后再更新所在班级的人数

#创建触发器,当新增完成后更新所在班级的人数
#创建触发器
creatr trigger tr_updateclassnum
#后置新增触发器
afert insert 
#关于哪个表
on mystar
#针对每一行
fro each row
begin
    #修改 在指定班级人数的基础上+1
#new存储新增数据
  update mystarclass set cnum = cunm + 1 ,#更新班级人数
  cdate = now()#更新日期
  where cname  = new.sclass;
end

insert into mystar(sname,sclass,skill,slines)
  values('魏和尚','亮剑','团长去哪俺去哪','团长给脸俺得兜着');

#创建触发器,当修改姓名后,将旧名字和新名字添加到修改记录表中

create trigger tr_upname
after update on mystar
for each row
begin
#判断新名字 旧名字是否一致 不一致再添加
  if old.sname != new.sname then
  insert into mystarupdate(oldname,newname,times)
  balues(old,sname,new.sname,now());
 end if;
end
#修改名字
update mystar set sname = '魏大勇' where id = 6;
#不改名字
update mystar set skill = '少林寺铁头功' where id = 61、新数据存new 旧数据存old
2、新增是新数据  修改室先旧数据 后新数据
   删除是旧数据  
       新增new  删除 old  修改 先old  再new

after 和before  的区别
时间线   先before 中增删改 再after

1、before 前置触发器
2、insert、update、delete动作
3、after后置触发器

before 前置触发器,触发时:增删改动作是否已经完成了?
增删改动作会等待前置触发器操作完成后才会继续
before 前置触发器会首先获得增删改的值
新数据存new 旧数据存old,等待我们去操作数据,
可以使用set new.字段 = XXX;  来修改新数据
改完 之后,不需要做任何操作,增删改动作会继承

after后置触发器
触发时:增删改动作是否已经完成了?
已经完成了增删改动作,新数据已经填入表中
如果需要操作数据,可以使用增删改完成



before:我先吃了半个
全家吃瓜
after:打你一顿




触发时:增删改动作是否已经完成了


#1、创建修改触发器,当手机的话费低于50元是,自动充值100元
#第一种是前置的  在低于五十之前,修改要话费余额,基础增加100元
#然后再继续修改
create trigger tr_congzhi
before update on myphone
for each row
begin
  #先判断余额是否低于50
  if new.phone_bill <50 then
  #修改要话费余额,基础增加100
  set new.phone_bill = new.phone_bill +100;
 end if;
 #因为是前置触发器,只需要修改要填入的心智,增删改动作仍会继续
end

update myphone set phone_bill = 20 where id = 3;

#第二种 我已经知道低于五十了  在基础上update 修改

create trigger tr_congzhi2
after update on myphone
for each row 
begin
 #获取当前余额
 set @bill = new.phone_bill;
 if @bill <50 then
  #在基础上update修改
  update myphone set phone_bill = @bill +100
  where id = new.id;
end if;
end
update myphone set phone_bill = 49 where id = 4;

翻新房子
旧房子 装修风格——old 原样  无论如何 都不会管 
新房子 装修风格——new 
before:装修房子装修院准备好了,还没实施之前,修改预案,改完装修增长进行
after:装修完了,把墙从蓝刷到粉色,只能在进行操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值