MySQL触发器的使用和inserted和deleted表介绍

 更新时间:2023年05月17日 08:43:31   作者:谷艳爽faye  
这篇文章主要介绍了MySQL触发器的使用和inserted和deleted表,触发器,就是一种特殊的存储过程,触发器和存储过程一样是一个能够完成特定功能和存储在数据库服务器上的SQL片段,感兴趣想要详细了解可以参考下文

背景

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

什么时sqlserver触发器

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

触发器的种类

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

触发器的使用

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

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

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

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

首先介绍一下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

到此这篇关于MySQL触发器的使用和inserted和deleted表介绍的文章就介绍到这了,更多相关MySQL触发器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 库名表名大小写问题与sqlserver兼容的启动配置方法

    库名表名大小写问题与sqlserver兼容的启动配置方法

    库名表名大小写问题与sqlserver兼容的启动配置方法,需要的朋友可以参考下。
    2010-12-12
  • MySQL8.0.3 RC版即将发布 先来看看有哪些变化

    MySQL8.0.3 RC版即将发布 先来看看有哪些变化

    MySQL8.0.3 RC版即将发布,这篇文章主要介绍了MySQL8.0.3 RC版的一些新变化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • MySQL查询性能优化的7个常见查询错误及解决方案

    MySQL查询性能优化的7个常见查询错误及解决方案

    数据库性能是Web应用和大型软件系统稳定运行的关键,即使是精心设计的应用,如果数据库查询效率低下,也会导致用户体验下降、系统资源浪费,甚至系统崩溃,本文将深入探讨MySQL查询优化,分析常见的查询错误,并提供提升数据库性能的实用技巧,需要的朋友可以参考下
    2025-04-04
  • MySQL中怎么匹配年月

    MySQL中怎么匹配年月

    一般数据库中给到的时间都是年-月-日形式的,那怎么匹配年-月/的形式呢,下面通过实例代码介绍怎么在数据库中查询到关于2021年8月的数据,对mysql匹配年月相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • MySQL数据库升级的一些

    MySQL数据库升级的一些"陷阱"

    这篇文章主要介绍了MySQL数据库升级需要注意的地方,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • mysql中json的使用方式详解

    mysql中json的使用方式详解

    这篇文章主要介绍了mysql中json的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • IOS 数据库升级数据迁移的实例详解

    IOS 数据库升级数据迁移的实例详解

    这篇文章主要介绍了IOS 数据库升级数据迁移的实例详解的相关资料,这里提供实例帮助大家解决数据库升级及数据迁移的问题,需要的朋友可以参考下
    2017-07-07
  • mysql创建的外键无法保存的原因以及处理办法

    mysql创建的外键无法保存的原因以及处理办法

    这篇文章主要介绍了mysql创建的外键无法保存的原因以及处理办法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • MySql与Navicat安装教程分享

    MySql与Navicat安装教程分享

    这篇文章主要介绍了MySql与Navicat安装教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • PHP使用mysqli扩展连接MySQL数据库

    PHP使用mysqli扩展连接MySQL数据库

    这篇文章主要介绍了PHP使用mysqli扩展连接MySQL数据库,需要的朋友可以参考下
    2014-08-08

最新评论