sqlserver触发器的使用以及inserted和deleted详解

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: sqlserver触发器的使用以及inserted和deleted详解

背景:最近在项目中有需求是当人员表中有变动时(比如:增加人员、修改人员信息、删除人员信息)需要把这张表中的变动的信息同步到它对应的日志表中。那么如果用代码写逻辑的话在执行效率上会比较慢,正好sqlserver提供了触发器,我们可以利用触发器进行解决这个问题。


什么时sqlserver触发器


触发器是在对表进行插入、更新或删除操作时自动执行的特殊存储过程。触发器通常用于强制业务规则,触发器是一种高级约束,可以定义比CHECK约束更为复杂的约束:可以执行复杂的SQL语句(if/while/case),可以引用其他表中的列。触发器定义在特定的表上,与表相关,自动触发执行,不能直接调用,是一个事务(可回滚)。


触发器的种类


触发器是在对表进行增、删、改操作才能够触发触发器。这里分为after(之后)和instead of(之前)触发。after触发器要求只有执行某一操作(insert、update、delete)之后触发器才能被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身,其优先级高于触发语句的执行。


触发器的使用


以下内容介绍after之后的触发器。以navicat工具为例。


首先我们需要监测哪个数据库就在哪个数据库创建触发器。比如:需要监听人员表中的数据变化,那么就需要在人员表中添加触发器。点击表的设计,找到触发器


5e95ea88e223461c21da524986763f65_74873c2e73364ba59473af1d83e88130.png


在上方点击添加触发器,并设置触发器的名称以及触发的时间和在什么情况下触发。


2a17f904dcfe5382b455e8b004475126_ce38abf798f34b0480cd0dc09c2b0110.png


设置完这些之后可以去写逻辑


43f51f69d0c52b73f3d11ad22a38b26e_133aab6bad0140e28ba68c69ef0602ef.png


首先介绍一下sql触发器中两个表,inserted和deleted。可以理解为这两张表是临时表,它的表字段和在哪个表中创建触发器的字段是一致的,比如:我在人员管理表中添加了触发器,那么inserted表和deleted表中的字段是一致的。这两张表是系统在内存中创建的两张表,不会存储到数据库中,且这两张表是只读的,不能修改数据。当触发器完成工作之后,这两张表也会被删除


表操作 inserted表 deleted表
insert 存放新增的记录
update 存放新增的记录 存放更新前的数据
delete 存放新增的数据


举例:


BEGIN
--    if EXISTS (select * from deleted)    //判断deleted表中是否有数据
  declare @is_delete char(20)       //定义变量
  if EXISTS(
    select is_delete from inserted  
  )
  declare @userId varchar(20)
  declare @userName VARCHAR(20)
  declare @machineId VARCHAR(40)
  declare @operator_Id VARCHAR(20)
  declare @operator varchar(20)
  select @is_delete=is_delete,@userId=user_id,@userName=user_name,@machineId=machine_id,@operator_Id=update_user_id,@operator=update_user_name FROM inserted   //给变量赋值
  IF @is_delete=1  判断条件
  BEGIN
  insert into User_Management_Logs(user_id,user_name,act,machine_id,operator,operator_id) VALUES(@userId,@userName,'删除用户',@machineId,@operator,@operator_Id)  //在哪张表中插入数据
  END
END

相关实践学习
使用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
相关文章
|
6月前
|
SQL Oracle 关系型数据库
数据库sqlserver-----触发器的插入,更新和删除
数据库sqlserver-----触发器的插入,更新和删除
520 3
|
6月前
|
存储 SQL
SQL Server 存储过程 触发器 事务处理
SQL Server 存储过程 触发器 事务处理
|
存储 SQL 安全
数据库SQL Server 9-10 章(存储过程与触发器)
数据库SQL Server 9-10 章(存储过程与触发器)
211 0
|
SQL 存储 监控
sqlserver触发器详解:sqlserver触发器after/for和instead of的区别详解(实例讲解),触发器定义创建操作打通,触发器的优缺点,触发器使用建议
sqlserver触发器详解:sqlserver触发器after/for和instead of的区别详解(实例讲解),触发器定义创建操作打通,触发器的优缺点,触发器使用建议
2243 1
|
SQL 存储 安全
SQL Server——触发器
触发器,是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。经常通过触发器来强制实现不同表中的逻辑相关数据的引用完整性或一致性。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过过程名字而直接调用。当对某一个表进行诸如UPDATE、INSERT、DELETE这些操作时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则
|
SQL 存储 开发框架
SqlServer触发器的创建与使用
SqlServer触发器的创建与使用
|
2月前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
100 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
12天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
2月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
31 4
|
2月前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
52 11

热门文章

最新文章