SqlServer触发器的创建与使用

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: SqlServer触发器的创建与使用

前言

上期我们介绍了SqlServer的视图和存储过程创建与使用,这期我们介绍一下触发器。

有需要回顾的可以电梯直达看一下:

SqlServer视图的创建与使用

SqlServer存储过程的创建与使用


 

触发器的定义

触发器(Trigger)是针对某个表或视图所编写的特殊存储过程,它不能被显式地调用,

而是当该表或视图中的数据发生添加INSERT、更新UPDATE或删除DELETE等事件时自动被执行。

主要作用是实现由主键和外键所不能保证的复杂的参照完整性和数据一致性。

触发器的作用

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂参照完整性和数据的一致性,

它能够对数据库中的相关表进行级联修改,提高比CHECK约束更复杂的的数据完整性,并自定义错误消息。

触发器的主要作用主要有以下接个方面:

  1. 强制数据库间的引用完整性;
  2. 级联修改数据库中所有相关的表,自动触发其它与之相关的操作;
  3. 跟踪变化,撤销或回滚违法操作,防止非法修改数据;
  4. 返回自定义的错误消息,约束无法返回信息,而触发器可以;
  5. 触发器可以调用更多的存储过程;

触发器的优点

  1. 触发器是自动的。当对表中的数据做了任何修改之后立即被激活。
  2. 触发器可以通过数据库中的相关表进行层叠修改。
  3. 触发器可以强制限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。

触发器的缺点

  1. 增加了系统的复杂性。
  2. 嵌套触发器容易出现死锁现象。
  3. 触发器并没有提升多少性能。
  4. 可移植性差。
  5. 占用服务器资源,给服务器造成压力。
  6. 复杂的触发器维护困难。

触发器的分类

SqlServer包括三种常规类型的触发器:DML触发器、DDL触发器和登录触发器。


 

DML触发器

如果用户要通过数据操作语言 (DML) 事件编辑数据,则执行 DML 触发器。

DML 事件是针对表或视图的 INSERT、UPDATE 或 DELETE 语句。

在激发任何有效的事件时,将会激发这些触发器,而无论是否会影响任何表行。

当数据库服务器中发生数据操作语言事件时执行这些操作。

SqlServer中的DML触发器有三种:

  1. insert触发器:向表中插入数据时被触发;
  2. delete触发器:从表中删除数据时被触发;
  3. update触发器:修改表中数据时被触发。

 

当遇到下列情形时,应考虑使用DML触发器:

1. 通过数据库中的相关表实现级联更改

2. 防止恶意或者错误的insert、update和delete操作,并强制执行check约束定义的限制更为复杂的其他限制。

3. 评估数据修改前后表的状态,并根据该差异才去措施。


DDL触发器

DDL触发器是当服务器或者数据库中发生数据定义语言(主要是以create,drop,alter开头的语句)事件时被激活使用,

使用DDL触发器可以防止对数据架构进行的某些更改或记录数据中的更改或事件操作。

 


登录触发器

登录触发器将为响应 LOGIN 事件而激发存储过程。

与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。

因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。

如果身份验证失败,将不激发登录触发器。


 

触发器的种类

 

after触发器(之后触发)

在执行 INSERT、UPDATE、MERGE 或 DELETE 语句的操作之后执行 AFTER 触发器。

如果违反了约束,则永远不会执行 AFTER 触发器;因此,这些触发器不能用于任何可能防止违反约束的处理。

对于在 MERGE 语句中指定的每个 INSERT、UPDATE 或 DELETE 操作,将为每个 DML 操作触发相应的触发器。

 

instead of 触发器

INSTEAD OF触发器替代下列触发语句的标准操作。

因此,触发器可用于对一个或多个列执行错误或值检查,然后在插入、更新或删除行之前执行其他操作。

INSTEAD OF触发器的主要优点是可以使不能更新的视图支持更新。

INSTEAD OF触发器的另一个优点是使您得以编写这样的逻辑代码:在允许批处理的其他部分成功的同时拒绝批处理中的某些部分。

 

下表对 AFTER 触发器和 INSTEAD OF 触发器的功能进行了比较。

 

Transact-SQL DDL 触发器

用于执行一个或多个 Transact-SQL 语句以响应服务器范围或数据库范围事件的一种特殊类型的 Transact-SQL 存储过程。

例如,如果执行某个语句(如 ALTER SERVER CONFIGURATION)或者使用 DROP TABLE 删除某个表,则激发 DDL 触发器。

 

CLR DDL 触发器

CLR 触发器将执行在托管代码(在 .NET Framework 中创建并在 Transact-SQL 中上载的程序集的成员)中编写的方法,而不用执行 SQL Server存储过程。

 


 

回到顶部

使用T-SQL语句来增删查改触发器

创建触发器

--创建一个触发器
--检测到表数据有update时,更新CreateTime时间为当前时间
create trigger trigger_a_Students  --触发器名称
on a_Students for update
as
begin
update a_Students SET CreateTime=GETDATE()  --触发器需要执行的sql
end
--测试
--执行一个修改语句
update a_Students
set Name='孙悟空1'
where Number=100001
--查看数据
select * from a_Students

删除触发器

--删除触发器
drop trigger trigger_a_Students   --触发器名称

查询触发器

--查看所有触发器
select * from sysobjects where xtype='TR'
-- 查看单个触发器 
exec sp_helptext 'trigger_a_Students'   --触发器名称

修改触发器

--修改一个触发器
--检测到表数据有update,insert时,更新CreateTime时间为当前时间
alter trigger trigger_a_Students  --触发器名称
on a_Students for update,insert
as
begin
update a_Students SET CreateTime=GETDATE()  --触发器需要执行的sql
end
--测试
--执行一个插入语句
INSERT INTO a_Students(Number,Name,ClassId) 
VALUES('100016','李靖',3)
--查看数据
select * from a_Students

 

好了,我们就介绍到这里吧,

拜拜,我们下次不见不散。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
7月前
|
SQL Oracle 关系型数据库
数据库sqlserver-----触发器的插入,更新和删除
数据库sqlserver-----触发器的插入,更新和删除
614 3
|
7月前
|
存储 SQL
SQL Server 存储过程 触发器 事务处理
SQL Server 存储过程 触发器 事务处理
105 0
|
存储 SQL 安全
数据库SQL Server 9-10 章(存储过程与触发器)
数据库SQL Server 9-10 章(存储过程与触发器)
227 0
|
SQL 存储 监控
sqlserver触发器详解:sqlserver触发器after/for和instead of的区别详解(实例讲解),触发器定义创建操作打通,触发器的优缺点,触发器使用建议
sqlserver触发器详解:sqlserver触发器after/for和instead of的区别详解(实例讲解),触发器定义创建操作打通,触发器的优缺点,触发器使用建议
2496 1
|
存储 SQL 数据库
sqlserver触发器的使用以及inserted和deleted详解
sqlserver触发器的使用以及inserted和deleted详解
687 0
|
SQL 存储 安全
SQL Server——触发器
触发器,是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。经常通过触发器来强制实现不同表中的逻辑相关数据的引用完整性或一致性。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过过程名字而直接调用。当对某一个表进行诸如UPDATE、INSERT、DELETE这些操作时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则
|
3月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
104 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
22天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。