【数据库】数据库视频总结(九)

举报
Laura_张 发表于 2022/08/27 00:24:36 2022/08/27
【摘要】                                      第十章 触发器 目录       &nb...

                                     第十章 触发器

目录

                                     第十章 触发器

定义

优点

种类

操作



 

定义

一个在修改指定表中的数据时执行的存储过程。通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性或一致性。

触发器主要通过事件进行触发而被执行,而存储过程可以通过存储过程名字被直接调用。

优点

自动执行;可以通过数据库中的相关表进行层叠更改;可以强制限制,比check约束更应具有约束力。

种类

DDL触发器:当服务器或者数据库中发生数据定义语句DDL事件时将被调用。

DML触发器:当数据库服务器中发生数据操作语句DML事件时要执行的操作。

Insert update  delete 都属于DML触发器,它是对某一个数据表的某一个数据操作语句进行触发的种类。

两种触发器存在的位置是不同的,DML存在数据表下,DML是针对于数据库的触发器,存在数据库中。

操作

创建insert触发器

语法格式:

 

实例:创建触发器,执行插入操作时被触发。

--创建一个新的触发器
create trigger T_addnum
on  学生信息
for insert 
as 
	update  班级信息 set 班级人数=班级人数+1
	where 班级编号 =(select  所属班级  from inserted)


--进行查询
select 班级人数  from 班级信息 where  班级编号='120'
insert into 学生信息 values('150','章','女','2011-02-02','1','15631670968','2019-02-02','1112','21222')
select 班级人数 from 班级信息 where  班级编号='120'

创建delete触发器

实例:创建一个delete触发器,当执行删除操作时,会引发触发器。

--创建触发器
create trigger T_deleteacher
on course_Info
for delete
as 
	--当删除了信息之后,会提示
	select course_No as 被删除的记录 ,course_No,course_Name,course_Type  from  deleted


--进行删除操作
delete from course_Info where course_No='12302'
--查询结果
select * from course_Info

创建update触发器

--定义一个触发器,不允许更改记录,当更改记录时,会有提示。
create trigger t_update 
on student_Info
for update 
as 
	--判断是否更改记录,返回不同的结果。
if (update(student_ID) or update (student_Name))
begin 
	print '事务不能被处理,基础数据不可以修改!'
	rollback transaction 
end 
else 
	print '数据修改成功!'


--触发存储过程
update student_Info set student_Name ='laur ' where student_ID='180'
--显示事务不能被处理,触发器已经触发。
select * from student_Info

--或者是
update student_Info set student_Sex ='男' where student_ID='180'
select * from student_Info
--记录已经修改完成,可以查询到结果。

创建DDL触发器

语法格式:

实例: 

实例:
create trigger T_notdelete
on database
for drop_table,alter_table
as 

	print '事务不能被处理,基础数据表不能被修改和删除!'
	rollback
--以上创建了一个触发器,不允许当前数据被操作




--使用drop语句,删除具体的数据表
drop table student_Info
--显示事务不能被处理。

管理触发器

修改,删除,启用,禁用。

通过具体的操作命令。

通过命令菜单可以查看触发器的创建语句,可以简单微调进行调整,调整完成后直接进行执行就可以。

 

如果想要本次的操作不能触发,可以选择禁用这个触发器,之后可以选择启用。

--更新数据表时,禁用触发器
alter table course_Info 
disable  trigger T_deleteacher 

--启用触发器
alter table course_Info 
enable trigger T_deleteacher 



--删除触发器
drop trigger T_addnum 

嵌套触发器

修改另外一个表时可能会触发另外一个触发器,防止这种情况,需要嵌套触发器。

最多可以嵌套32层

实例:

create trigger t_del 
on 新员工信息
fro delete
as	
	
	insert into  员工信息(员工编号,员工姓名,所在部门编号,所任职位,性别)
	select 员工编号,员工姓名,所在部门编号,所任职位,性别
	from delectd

--创建第二个触发器 更新当前员工的人数
create trigger t_acd
on 员工信息
for insert 
as 
	
	update 部门信息 set 员工人数=员工人数+1
	where  部门编号=(select 所在部门编号 from inserted)




--删除记录
delete from 新员工信息 where  员工编号=14--进行删除操作,触发删除触发器
select 员工人数 from  部门信息 where  部门编号='10010' --执行插入操作,会触发本表上的插入触发器。

递归触发器

任何触发器都可以包含影响同一个表或者是另一个表的update insert delete语句。如果启用递归触发器,改变表中数据的触发器,通过递归执行可以再次触发自己。在数据库创建时,默认情况下递归触发器选项是禁用的,可以通过alter database语句(或者是操作界面)来启用。

操作:数据库-属性-选项-杂项-递归触发器已启用-true

注意事项:

1、必须经过有条理的设计和全面的测试

2、在任一点的数据修改会触发一系列触发器,如果表要求已特定的顺序更新用户的表时,使用递归触发器会产生问题。

3、所有触发器一起构成一个大事务。如何触发器中的任何位置上的rollback命令都将取消所有的数据输入。

4、触发器最多递归16层。

 

                                 感谢您的阅读,欢迎斧正~

文章来源: blog.csdn.net,作者:张艳伟_Laura,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Laura__zhang/article/details/103327979

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。