前言:

触发器只是用在特定的场合,一般情况下,我们还是在代码中处理,因为同一个业务逻辑中,如果代码和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触发器的作用及弊端相关推荐

  1. 多字段mysql触发器实例_mysql触发器原理与用法实例分析

    本文实例讲述了mysql触发器原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是触发器 创建触发器 单条触发器语句 多条触发器语句 查看触发器 删除触发器 触发器的新旧记录引用 首发日期 ...

  2. java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用

    触发器和存储过程是为了提高SQL的运行效率. SQL语句先编译.后执行,而触发器与存储过程都会提前预编译完成,且只编译一次,供反复调用. 随着时代的进步,硬件与带宽的提升,触发器和存储过程提升效率并不 ...

  3. mysql 触发器 模板_MySQL 触发器例子(两张表同步增加和删除)

    MySQL 触发器例子(两张表同步增加和删除),有需要的朋友可以参考下. 例子1: 创建两个表,目的是在一个表里添加一条记录,另一个表也添加一条记录: DROP TABLE IF EXISTS tab ...

  4. mysql 触发器 分行_mysql 触发器

    mysql 触发器中有两个insert 语句 第二个inert 要用第一个insert 的结果怎么实现 DELIMITER $$ USE `nightclub`$$ DROP TRIGGER /*!5 ...

  5. mysql触发器 存储过程_mysql触发器和存储过程

    Mysql触发器和存储过程 1 / 9Mysql触发器 1.语法:命名规则 CREATE TRIGGER { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ...

  6. mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

    MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...

  7. mysql 触发器 修改记录_mysql触发器

    什么是触发器 简单的说,就是一张表发生了某件事(插入.删除.更新操作),然后自动触发了预先编写好的若干条SQL语句的执行: 特点及作用 特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原 ...

  8. mysql触发器菜鸟_mysql触发器学习

    创建一个触发器 语法:create trigger 触发器名字create trigger xiaoshou_update_trigger after update on xiaoshou for e ...

  9. mysql 触发器示例_MySQL触发器示例

    触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 创建触发器 CREATE TRIGGER trigger_n ...

最新文章

  1. 三十分钟理解:双调排序Bitonic Sort,适合并行计算的排序算法
  2. python3 判断列表是否存在某元素
  3. 第一个简单的DEMO
  4. PUCCH Format
  5. linux一键搭建ddns,LINUX下搭建DDNS
  6. 红橙Darren视频笔记 自定义View总集篇
  7. java支持闭包_JAVA 需要引入闭包吗
  8. python 序列列表区别_Python6序列和列表
  9. linux定时器王贤才,《linux内核设计与实现》 学习笔记(十七)---设备和模块
  10. Atitit enhance dev effect提升开发效率的十大原理与方法v3 u66.docx Atitit enhance dev effect提升开发效率的十大原理与方法v2 u66.do
  11. 最小二乘支持向量回归Matlab实现
  12. 采用生产者消费者模式爬取毛豆新车网
  13. Python状况:为什么PyPy是Python的未来?
  14. SQL查询中in和exists的区别
  15. [Android]进程通信Andromeda框架
  16. 家用监控系统需要服务器吗,家庭监控系统实现(一)
  17. C语言 指针的解引用详解
  18. 【KGAT】Knowledge Graph Attention Network for Recommendation
  19. IE和火狐的在js和css上的差别
  20. 我的大学(三)——反思与回顾

热门文章

  1. 咸鱼Maya笔记—灯光阴影
  2. ebay账号防关联4要素(ebay防关联软件)
  3. PPT投影时常用快捷键
  4. c语言数据库专业特长怎么写,计算机专业的特长怎么写
  5. 当年入门时写的的《大富翁》
  6. cordova camera插件——摄像头插件的使用及上传图片
  7. XMUT第七届蓝桥杯全国软件和信息技术专业人才大赛校内选拔赛模拟赛
  8. 【对讲机的那点事】物流行业为什么会选择公网集群对讲机?
  9. 財報中的HoH, YoY, MoM, QoQ是什麼意思?
  10. LeetCode 1757. 可回收且低脂的产品