mysql触发器弊端_MySQL触发器的作用及弊端
前言:
触发器只是用在特定的场合,一般情况下,我们还是在代码中处理,因为同一个业务逻辑中,如果代码和sql中都有业务逻辑,那么后期维护将很麻烦,所以要根据实际情况来选择,看是否合适。触发器就是写在数据库中的一个脚本sql,当数据库某一个字段发生改变的时候,触发一个或多条sql语句,同时让多张表的数据同步。比如我们有的表中存放了部门名称,那么当我们部门名称发生改变的时候,我们应该调用触发器同时去修改存放了“部门名称”这个冗余字段。
什么是触发器:
简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行.
特点及作用:
特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原子性,要么全部执行,要么都不执行.
作用:1.安全性。可以基于数据库的值使用户具有操作数据库的某种权利。
2.审计。可以跟踪用户对数据库的操作。
3.实现复杂的非标准的数据库相关完整性规则。触发器可以对数据库中相关的表进行连环更新。触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这种触发器会起作用。
4.同步实时地复制表中的数据。
5.自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。
弊端:
1.增加程序的复杂度,有些业务逻辑在代码中处理,有些业务逻辑用触发器处理,会使后期维护变得困难.
2.如果需要变动整个数据集而数据集数据量又较大时,触发器效果会非常低.
3.对于批量操作并不适合使用触发器 使用触发器实现的业务逻辑在出现问题时很难进行定位,特别是设计到多个触发器的情况 协同开发时,写业务层代码如果不清楚数据库 触发器的细节,容易搞不清到底触发了那些触发器 大量使用触发器会导致代码结构容易被打乱,阅读源码困难.
触发器的创建:
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
trigger_name:用来表示触发器的名称,可以自己设计
trigger_time:标识触发器的触发时机,取值是BEFORE或AFTER
trigger_event:标识触发事件,取值为INSERT,UPDATE和DELETE
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。
由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。
不能在一个表中建两个相同类型的触发器,所以一个表最多只能建6个触发器;
查看触发器:
SHOW TRIGGERS [FROM schema_name];
这里的schema_name 就是指定的库名
删除触发器:
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
触发器的修改:
触发器不能修改, 只能删除以后重新创建.
触发器的执行顺序:
我们建立的数据库一般都是 InnoDB 数据库,其上建立的表是事务性表,也就是事务安全的。这时,若SQL语句或触发器执行失败,MySQL 会回滚事务,有:
①如果 BEFORE 触发器执行失败,SQL 无法正确执行。
②SQL 执行失败时,AFTER 型触发器不会触发。
③AFTER 类型的触发器执行失败,SQL 会回滚
mysql触发器弊端_MySQL触发器的作用及弊端相关推荐
- 多字段mysql触发器实例_mysql触发器原理与用法实例分析
本文实例讲述了mysql触发器原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是触发器 创建触发器 单条触发器语句 多条触发器语句 查看触发器 删除触发器 触发器的新旧记录引用 首发日期 ...
- java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用
触发器和存储过程是为了提高SQL的运行效率. SQL语句先编译.后执行,而触发器与存储过程都会提前预编译完成,且只编译一次,供反复调用. 随着时代的进步,硬件与带宽的提升,触发器和存储过程提升效率并不 ...
- mysql 触发器 模板_MySQL 触发器例子(两张表同步增加和删除)
MySQL 触发器例子(两张表同步增加和删除),有需要的朋友可以参考下. 例子1: 创建两个表,目的是在一个表里添加一条记录,另一个表也添加一条记录: DROP TABLE IF EXISTS tab ...
- mysql 触发器 分行_mysql 触发器
mysql 触发器中有两个insert 语句 第二个inert 要用第一个insert 的结果怎么实现 DELIMITER $$ USE `nightclub`$$ DROP TRIGGER /*!5 ...
- mysql触发器 存储过程_mysql触发器和存储过程
Mysql触发器和存储过程 1 / 9Mysql触发器 1.语法:命名规则 CREATE TRIGGER { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ...
- mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)
MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...
- mysql 触发器 修改记录_mysql触发器
什么是触发器 简单的说,就是一张表发生了某件事(插入.删除.更新操作),然后自动触发了预先编写好的若干条SQL语句的执行: 特点及作用 特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原 ...
- mysql触发器菜鸟_mysql触发器学习
创建一个触发器 语法:create trigger 触发器名字create trigger xiaoshou_update_trigger after update on xiaoshou for e ...
- mysql 触发器示例_MySQL触发器示例
触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 创建触发器 CREATE TRIGGER trigger_n ...
最新文章
- 三十分钟理解:双调排序Bitonic Sort,适合并行计算的排序算法
- python3 判断列表是否存在某元素
- 第一个简单的DEMO
- PUCCH Format
- linux一键搭建ddns,LINUX下搭建DDNS
- 红橙Darren视频笔记 自定义View总集篇
- java支持闭包_JAVA 需要引入闭包吗
- python 序列列表区别_Python6序列和列表
- linux定时器王贤才,《linux内核设计与实现》 学习笔记(十七)---设备和模块
- Atitit enhance dev effect提升开发效率的十大原理与方法v3 u66.docx Atitit enhance dev effect提升开发效率的十大原理与方法v2 u66.do
- 最小二乘支持向量回归Matlab实现
- 采用生产者消费者模式爬取毛豆新车网
- Python状况:为什么PyPy是Python的未来?
- SQL查询中in和exists的区别
- [Android]进程通信Andromeda框架
- 家用监控系统需要服务器吗,家庭监控系统实现(一)
- C语言 指针的解引用详解
- 【KGAT】Knowledge Graph Attention Network for Recommendation
- IE和火狐的在js和css上的差别
- 我的大学(三)——反思与回顾