SQL 触发器

这篇具有很好参考价值的文章主要介绍了SQL 触发器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是触发器?
1、触发器是一个在修改指定表或数据库中的数据时执行的存储过程,
是通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性或唯一性。
由于操作数据库不能绕过数据库,所以就可以用它来强制实施复杂的业务规则来保证数据的完整性。
2、触发器不同于存储过程,它主要是通过事件的进行而被触发执行的。
而存储过程是可以通过存储过程的命名进行调用。每当对表进行增删改的时候,
sql server就会自动执行触发器定义的sql语句,从而确保对数据的处理必须符合这些sql语句定义的规则。

二、为什么要使用触发器?
1.触发器自动执行,对表或对数据库的数据进行修改拿值等操作就会触发。
2.它可以通过数据库中的相关表进行层叠更改,这比把代码写在前台的做法更安全合理。
3.它也可以强制限制数据的完整性,它的限制比数据库中自带的CHECK约束还要强大和复杂,和CHECK约束不同的是,触发器还可以引用其他表中的列,CHECK约束只是在某个表的某一列加上约束。

三、触发器的种类
1、DDL触发器(针对数据库级别)
1.1.当服务器或者数据库中发生数据的定义语言事件时就会调用DDL触发器,
如果要执行以下操作,就可以使用DDL触发器。
1.1.1.防止对数据库架构的某些内容的更改
1.1.2.防止对数据库中的数据进行删除等操作。
1.1.3.或者记录数据库架构中的事件或修改操作。

2.DML触发器(数据操作)
2.1.DML触发器是当前数据库或者服务器中发生操作语言事件时就会执行的操作。
DML触发器通常分为三种,INSERT(增)触发器、UPDATE(改)触发器、DELETE删(触发器)
2.2.DML触发器可以查询其他表的内容,还可以包含复杂的T-SQL语句。将触发器好触发它的语句作为可在触发器内回滚的单个事务对待,如果检测到错误。则整个事务自动回滚。

四、DML触发器的法语格式

1、触发器的关键字:TRIGGER 

2、NO关键字是:在数据库的某个表或某个视图上创建一个触发器

3、FOR(操作数据的时候触发) | AFTER(执行完操作后才执行这个) | INSTEAD OF(很少用,我也不理解) | 这三个参数是给触发器定义类型用的

4、[DELETE] [,] [INSERT] [,] [UPDATE] 这三个关键字就是对表进行操作的。

5、最后一个就是对触发器数据完整性的T-SQL语句

CREATE TRIGGER triggeer_name
NO{table | veiw}
{
{{FOR | AFTER | INSTEAD OF}
{[DELETE] [,] [INSERT] [,] [UPDATE]}

AS
sql_name
}

}

五、触发器的实例操作(以下都是DML触发器的实例)

1、新增触发器

CREATE trigger T_trigg
on StudentInfo
for insert
as
update Class_size set num = num+1
where id = (select num from inserted)

SQL 触发器

SQL 触发器 

SQL 触发器 

 2、删除触发器

create trigger T_delete
on StudentInfo
for delete
as
select name as 删除名字 from deleted

update Class_size set num = num-1
where id = (select num from deleted)

SQL 触发器

select * from Class_size
delete from StudentInfo where id = '1'
select * from Class_size

 

SQL 触发器

 3、修改触发器

create trigger T_uoadte
on StudentInfo
for update
as
if(update(name) or update(id))
begin
	print'姓名和id不可修改'
	rollback transaction
end
else
	print '修改成功'

SQL 触发器

select * from StudentInfo
update StudentInfo set name = '测试' where id = '2'
select * from StudentInfo

 SQL 触发器

select * from StudentInfo
update StudentInfo set num = '1' where id = '2'
select * from StudentInfo

 SQL 触发器

 六、DDL触发器的法语格式

1.ddl触发器的语法格式(和dml的差不多就是关键字不一样)

CREATE TRIGGER triggeer_name
NO { all server | database}
with encryption
{for | after | {event_type}}
AS
sql_name

2、all server 和 database 的区别就是第一个是针对全部服务器的,后面的是针对数据库

3、 with encryption的话是否对这个触发器的文本进行加密

4、event_type 就是对触发器执行的时候要进行的操作的sql语句

5、最后一个就是对触发器数据完整性的T-SQL语句

七、触发器的实例操作(以下都是DDL触发器的实例)

1、操作数据库

create trigger T_nodelete
on database
for drop_table,alter_table
as
	print '错误,此数据库不能被删除或修改'
	rollback

SQL 触发器

 

drop table cuont

ALTER TABLE cuont
ADD yrr date

SQL 触发器

 

八、管理触发器

--禁用触发器
alter table StudentInfo
disable trigger T_trigg

--启用触发器
alter table StudentInfo
enable trigger T_trigg

--删除触发器
drop trigger T_trigg

SQL 触发器

 

九、嵌套触发器

create trigger t_deletes
on studentInfo2
for delete
as
	insert into studentInfo(student_id,name,num)
	select student_id,name,num
	from deleted

SQL 触发器

create trigger t_add
on StudentInfo
for insert
as
	update Class_size set num = num + 1
	where id = (select num from inserted)

 SQL 触发器

select * from studentInfo2
select * from Class_size
select * from StudentInfo
delete studentInfo2 where id = '1'
select * from studentInfo2
select * from Class_size
select * from StudentInfo

 SQL 触发器

 SQL 触发器

 

十,简单了解递归触发器

1、任何触发器都可以包含影响同一个表或另一个表的UPDATE、INSERT或DELETE语句。如果启用递归触发器选项,那么改变表中数据的触发器,通过递归执行就可以再次触发自己。在数据库创建时,默认情况下递归触发器选项是禁用的,但可以使用ALTER DATABASE语句来启用它。

SQL 触发器

SQL 触发器 

 SQL 触发器

 

一、递归触发器具有复杂特性,可以用它来解决诸如自引用关系这样的复杂关系。使用递归触发器时,需要考虑以下的事项和原则:
1、递归触发器很复杂,必须经过有条理的设计和全面的测试。

2、在任意点的数据修改会触发一系列触发器。尽管提供处理复杂关系的能力,但是如果表要求以特定的顺序更新用户的表时,使用递归触发器就会产生问题
3、所有触发器一起构成一个大事务。任何触发器中的任何位置上的
ROLLBACK命令都将取消所有数据输入。所有数据均被擦除,并且无任何数据将被放到表中。
4、触发器最多只能递归16层。换句话说,如果递归链中的第16个触发器激活了第17个触发器,则结果与发布ROLLBACK命令一样,
所有数据将被擦除。

 注:本内容仅供是本人自己学习参考,如有雷同实属巧合。请给位大佬手下留情啊!!!文章来源地址https://www.toymoban.com/news/detail-498477.html

 注:本内容仅供是本人自己学习参考,如有雷同实属巧合。请给位大佬手下留情啊!!!

 注:本内容仅供是本人自己学习参考,如有雷同实属巧合。请给位大佬手下留情啊!!!

到了这里,关于SQL 触发器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库-触发器

    目录 1. 触发器概述 2. 触发器的创建 2.1 创建触发器语法 3. 查看、删除触发器  3.2 删除触发器 4. 触发器的优缺点 4.2 缺点 4.3 注意点 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中, 我们

    2024年02月07日
    浏览(59)
  • MySQL数据库触发器

    查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表等。本节将详细介绍这两种查看触发器的方法。 SHOW TRIGGERS语句查看触发器信息 在 MySQL 中,可以通过 S

    2023年04月12日
    浏览(48)
  • SQL视图、存储过程、触发器

    视图(view)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查

    2024年02月09日
    浏览(66)
  • SQL Server之触发器

    触发器 触发器是一种特殊类型的存储过程,主要是通过事件触发来执行的,而存储过程可以通过存储过程名来直接调用。当往某一个数据表中插入、修改或者删除记录时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规

    2024年02月06日
    浏览(36)
  • 如何使用SQL语句创建触发器

    🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:记录SQL server触发器的创建语句,以及简单介绍. 触发器 是一种特殊类型的 存储过程 ,它不同于我们前面介绍过的存储过程。 存储

    2024年02月10日
    浏览(36)
  • SQL sever中的触发器

    目录 一、触发器概念 二、触发器优缺点 2.1优点: 2.2缺点: 三、触发器种类 四、触发器创建 4.1创建DML触发器 4.2创建DDL触发器 4.3创建登录触发器 五、触发器管理 5.1查看触发器 5.1.1.使用sp_helptext存储过程查看触发器 5.1.2.获取数据库中触发器的信息 5.2修改触发器 5.2.1修改DM

    2024年02月05日
    浏览(43)
  • 【基础7】SQL事务及触发器

    目录 事务(TRANSACTION) 触发器 DML触发器 DDL触发器 触发器的练习 什么是事务 事务是作为单个逻辑工作单元执行的一系列操作,它包含了一组数据库操作命令 所有的操作命令作为一个整体一起向系统提交,要么都执行、要么不执行 事是SQL Server 中执行并发控制的基本单位,是

    2024年02月06日
    浏览(43)
  • sql server中的触发器

    目录 1.触发器的定义 2  触发器的分类 3 :  dml触发器的工作原理 4 触发器的应用 1.insert触发器 2.delete触发器 3 update 触发器  DDL触发器 5.触发器的启用和禁用 触发器其实就是一个特殊的存储过程,这个存储过程呢,不能调用罢了, 而是当数据发生变化的时候才触发了这个过程,;  

    2024年02月06日
    浏览(47)
  • Mysql 触发器 -> 监控 -> 表 修改前后的 数据 -> 日志

    目录 0. 课程视频 1. 简介 1.1 是对象-与表有关 1.2 校验数据完整性 - 日志记录 1.3 在 insert / update /delete 前后触发 1.4 支持行级触发(影响几行记录几次日志)- 不支持语句触发 1.4.1 行级触发器: 如数据五行 执行到第一行 触发器触发 执行到第二行 触发器又触发 1.4.1 语句触发: 如数

    2024年02月02日
    浏览(40)
  • MySQL——超详细数据库触发器教程

    目录 一、触发器的概念 二、创建触发器 三、查看触发器 四、删除触发器 总结         在实际开发中往往会碰到这样的情况:         当我们对一个表进行数据操作时,需要同步对其它的表执行相应的操作,正常情况下,如果我们使用sql语句进行更新,将需要执行多

    2024年02月07日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包