| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql 触发器使用详解 -> 正文阅读 |
|
[大数据]mysql 触发器使用详解 |
前言在上一篇,我们详细了解了mysql 存储过程 相关的内容,存储过程属于数据库编程的一种,使用存储过程可以在一定程度上减少程序与mysql服务的IO交互的次数,提升性能; 本篇要介绍的是mysql的触发器,也属于数据库编程的一种,相对存储过程来说,使用起来更加简单,在某些特定的场景下使用触发器,同样可以达到减少应用程序与mysql服务器交互次数从而提升性能的目的; 一、触发器简介触发器是一种特殊的存储过程,在定义触发器时会定义触发器的触发条件,使得触发器在满足触发条件时自动执行而不需要人为调用(存储过程需要人为参与); 触发器操作的是与表有关的数据库对象,比如在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合; 二、触发器特点及使用场景1、增强数据库的安全性
2、实现数据库操作的日志审计
3、实现复杂的级联操作 比如当创建一条订单数据时,需要同时往订单详情表,库存表,财务收支表等插入数据类似这样的操作就可以考虑使用触发器;
三、触发器类似与核心参数实际使用的时候,主要有3种类型的触发器可供选择:INSERT ,UPDATE ,和DELETE ,三种不同类型的触发器对应3种不同的使用场景;
在编写触发器的时候,有两个非常重要的参数对象,即 NEW 和 OLD,可以简单理解为,NEW 中保存并传递即将要完成插入的参数对象,而 OLD 记录的是插入或修改或删除之前的参数对象; 触发器类型与参数对象的对应关系如下所示:
四、触发器语法了解了mysql触发器相关的理论知识后,下面就来了解下触发器的使用吧; 1、创建语法
2、查看触发器
3、删除触发器
五、触发器使用案例准备两张表,一张业务表,一张日志记录表,模拟当业务表数据的增删改的时候,通过触发器将日志数据写到日志表; 业务表 user
日志表
六、INSERT类型 触发器使用
创建完毕后,查看下刚刚创建的触发器
接下来通过给user表插入一条数据
数据插入成功后,检查日志表是否有数据写入 七、UPDATE 类型触发器使用执行下面的语句进行触发器的创建
然后执行下面的 update语句验证下该类型的触发器是否生效;
cja 八、DELETE 类型触发器使用执行下面的sql创进行触发器创建
触发器创建完毕后,执行下面的delete sql,观察日志表是否有一条新增的数据
通过日志表发现,删除的触发器生效了; 九、触发器常用场景1、使用触发器实现两表或多表数据同步 举例来说,现在有A表和A_copy表,A_copy表的存在的目的相对于是备份表,存储了A表中的关键业务字段,应用程序向A表插入一条数据时,需同步向A_copy表插入一条数据,这样的业务场景就可以考虑使用触发器; 2、审计日志记录 如上面的案例,向核心业务主表进行增删改操作时,记录审计日志可以考虑使用触发器; 3、合规性检查 比如向核心业务表添加涉及到金钱相关的数据时,可以设定一定的检查规则,比如当金额超过一定的数量时,及时提示错误,防止错误数据进入系统; 十、触发器使用注意点合理利用触发器可以帮助应用程序减少与数据库的IO次数,一定程度上提升性能,但是触发器也有一些自身的缺点,在使用的时候需要注意,现做如下总结, 1、可读性较差 触发器最大的一个问题就是可读性差,因为触发器存储在数据库中,并且由事件驱动,这就意味着触发器有可能不受应用层的控制 ,这对系统维护是非常有挑战的; 2、相关数据的变更,可能会导致触发器出错 特别是涉及到数据的表结构变更,都有可能导致触发器出错,进而影响数据操作的正常运行。这些都会由于触发器本身的隐蔽性,影响到应用中错误原因排查的效率; |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:24:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |