在MySQL中,触发器可以在你执行INSERT、UPDATE或DELETE的时候,执行一些特定的操作。在创建触发器时,可以指定是在执行SQL语句之前或是之后执行这些操作。通过触发器,你可以实现一些业务逻辑或一些数据限制,在简化应用程序逻辑,优化系统性能时非常有用。但在使用MySQL触发器也有一些注意事项,否则会导致触发器不能工作或不按指定的方式工作。

1. MySQL触发器注意事项

MySQL触发器使用非常简单,当然其功能也比较有限。当你在项目中大量使用触发器,那么你应该注意以下几点,以避免触发器不按预期效果执行:

MySQL触发器能基于行触发,MySQL触发器始终时基于表中的一条记录触发,而不是一组SQL语句。因此,如果需要变动整个数据集而数据集数据量又较大时,触发器效果会非常低。

每一个表的一个事件只能定义一个触发器,例如:不能在AFTER INSERT上定义一个以上的触发器。

2. MySQL触发器可能导致的问题

由于MySQL触发器基于行触发的特性,因此对于批量操作并不适合使用触发器,如:汇总表、缓存表等。触发器使用不当,可能会导致以下问题:

一个MySQL触发器可能会关联到另外一张表或几张表的操作。因此,会导致数据库服务器负荷也会相应的增加一倍或几倍,如果出现因为触发器问题导致的性能问题,会很难定位问题位置和原因。

在基于锁的操作中,触发器可能会导致锁等待或死锁。触发器执行失败,原来执行的SQL语名也会执行失败。而因为触发器导致的失败结果和失败原因,往往很难排查。

由于MySQL触发器的种种问题,要求我们在创建触发器就应该充分考虑。避免使用不合适的触发器,并能对所有触发器有足够的了解,以便问题的定位和排查。

3. MySQL触发器的好处

对MySQL触发器有足够的认识和了解后,MySQL触发器会给我们带来极大的便利。当实现一些系统约束时,或在实现系统维护及针对操作数据的更新时,使用触发器都非常方便。在之胶我们介绍了MySQL触发器不适合做的一些工作,但MySQL触发器在以下一些应用场景中,会非常实用:

基于行数据变更的日志记录。如:在用户订单系统中,我们可以基于用户订单数据状态的改变,使用触发器构建用户订单日志表数据。

基于行数据变更的关系数据的更新。如:用户订单改变至付款或相关状态时,我们可以基于用户订单数据状态的改变,使用触发器改变用户会付款或相应状态信息。

基于行数据变更的数据汇总。如:用户订单成交或失败,我们可以基于用户订单数据状态的改变,使用触发器构建用户总成交量或失败量汇总数据。

以上仅列举了一些常用场景,合理的利用MySQL触发器会在数据库工作效率和开发效率上有很大的提高。关于触发器的使用方法,请参考:MySql触发器trigger的使用

mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项相关推荐

  1. mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程

    MySQL不能启动和停止 MySQL各种解决方法教程 本文章总结了种MySQL无法启动.无法停止解决办法,包括在windows系统,linux系统中mysql不能启动与停止的解决办法,有需了解的朋友可 ...

  2. mysql 用户管理表_Mysql—用户表详解(mysql.user)

    MySQL 数据库 Mysql-用户表详解(mysql.user) MySQL是一个多用户管理的数据库,可以为不同用户分配不同的权限,分为root用户和普通用户,root用户为超级管理员,拥有所有权限 ...

  3. mysql数据库管理系统模式_MYSQL命令行模式管理MySql的一点心得

    MYSQL命令行模式管理MySql的一点心得 MYSQL命令行模式管理MySql的一点心得 MySql数据库是中小型网站后台数据库的首选,因为它对非商业应用是免费的.网站开发者可以搭建一个" ...

  4. mysql读写分离 同步_MySQL数据库的同步配置+MySql读写分离

    使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3. ...

  5. mysql 安装在路由器_MySQL如何安装?安装MySQL数据库的三种方法

    MySQL如何安装?安装MySQL数据库的三种方法 目录 安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL ...

  6. 为啥mysql安装不上_mysql安装不上怎么办mysql安装失败原因和解决方法_MySQL

    mysql数据库安装不了了!mysql最后一步安装不上!mysql就是安装不上!是不是很头疼,很伤脑筋,现在大家不用着急了,小编为大家整理了mysql安装失败的原因以及mysql安装失败的解决方法,抓 ...

  7. mysql七个模块_mysql(pymysql模块的使用,视图,触发器)

    本节重点: pymysql的下载和使用 execute()之sql注入 增.删.改:conn.commit() 查:fetchone.fetchmany.fetchall 一.pymysql的下载和使 ...

  8. mysql支持啥系统_MySQL支持的操作系统列表MySQL综合 -电脑资料

    我们使用GNU Autoconf,因此将MySQL移植到所有使用Posix线程和C++编译器的现代系统是可能的, 已经报告MySQL可以在下列操作系统/线程包的组合上成功地进行编译.注意,对于很多操作 ...

  9. mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  10. mysql.net开发驱动_mysql数据库.net开发驱动(mysql connector net )

    MySQL Connector/Net 是 MySQL 官方的 .NET 驱动程序,MySQL 官方的 .NET 客户端开发包.mysql 数据库最新版dotnet数据库连接驱动. mysql-con ...

最新文章

  1. VC++:如何将程序最小化到托盘
  2. 关于火狐中ashx中输出javascript一闪而过的问题
  3. python入门题目及答案_Python基础自测题答案和基础知识梳理
  4. r语言plot函数x轴y轴名字_Matplotlib入门-1-plt.plot( )绘制折线图
  5. python中字典和集合对象是无序的_Python基础(四):元组、字典和集合
  6. 在java程序中定义的类有两种成员_java试题 急需答案 谢谢!!!
  7. c语言中block做函数参数,c语言中的block
  8. 小試正則表達式(必須包括數字,定量字符,字母)
  9. 代码审查清单 Code Review
  10. Spring Security3
  11. MyBatis(六)------MyBatis映射器(select元素、insert元素、update元素、select元素、sql元素)
  12. 10款精美的web前端源码的特效
  13. MATLAB GUI 设全局变量的位置
  14. PON光通道损耗的计算
  15. 聚合支付机构备案情况分析(截至22年1月27日)
  16. 开发APP、微信小程序、网页,都需要什么?
  17. 个人计算机更新主要基于,计算机基础知练识习题.doc
  18. excel基础-note-4.25
  19. 阿里云培训-负载均衡(CLB/ALB)
  20. 弄懂 JavaScript 执行机制,宏任务和微任务

热门文章

  1. jdk入门_JDK 9 REPL:入门
  2. javafx 8u40_JavaFX 8u20天的未来过去(始终在最前面)
  3. gdb 扩展 默认参数_默认方法一种扩展旧代码的方法
  4. Java 10将如何改变您的编码方式
  5. wso2 esb_通过运行示例从WSO2 ESB开始
  6. 五个使Java变得更好的功能
  7. SpringHibernate3
  8. 在您的构建过程中添加微基准测试
  9. dao层通用封装_DAO层–救援通用
  10. Java EE 8 MVC:全局异常处理