触发器:
概念:
触发器是一种特殊类型的存储过程,在满足定义条件操作时触发,并自动执行触发器中预先设定好的定义的语句集合。
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、处罚对象就是表,也就以为,触发器是建立在标上的
5、for 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 = 6;
1、新数据存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:装修完了,把墙从蓝刷到粉色,只能在进行操作
触发器
最新推荐文章于 2024-07-27 15:45:10 发布