4、触发器TRIGGER : 在某个表发生某一事件时,自动来触发某个操作。

触发器是MySql响应INSERT语句,UPDATE语句和 DELETE 语句而自动执行的一条MySql语句(或位于BEGIN 和 END 语句之间的一组语句)。其他MySql语句不支持触发器。只有表才支持触发器,视图不支持(临时表也不支持)。

4.1 创建触发器

需要给出4条信息:

  • 唯一的触发器名;【保持每个数据库的出触发器名唯一】
  • 触发器关联的表;
  • 触发器应该响应的活动(DELETE,INSERT或 UPDATE);
  • 触发器何时执行(处理之前或之后)

CREATE TRIGGER 触发器名 <BEFORE | AFTER >  

                    <INSERT | UPDATE | DELETE>触发事件 

                    ON <表名>  FOR  EACH ROW <触发器主体> 

before | after 触发事件:触发器可在一个操作发生之前或之后执行。

for each row:一般是指行级触发,对于受触发事件影响的每一行都要激活触发器的动作。例如,使用 INSERT 语句向某个表中插入多行数据时,触发器会对每一行数据的插入都执行相应的触发器动作。

注意:每个表都支持 INSERT、UPDATE 和 DELETE 的 BEFORE 与 AFTER,因此每个表最多支持 6 个触发器。每个表的每个事件每次只允许有一个触发器。单一触发器不能与多个事件或多个表关联。

4.1.1 创建INSERT触发器

INSERT触发器在INSERT语句执行之前或之后执行。需要知道以下几点:

  • 在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;
  • 在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值);
  • 对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值

4.1.2 创建DELETE 触发器

DELETE触发器在DELETE语句执行之前或之后执行。需要知道以下两点:

  • 在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行;
  • OLD中的值全都是只读的,不能更新。

4.1.3 UPDATE触发器

UPDATE触发器在UPDATE语句执行之前或之后执行。需要知道以下几点:

  • 在UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表访问以前(UPDATE语句前)的值,引用一个名为NEW的虚拟表访问新更新的值;
  • 在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值);
  • OLD中的值全都是只读的,不能更新。

4.1.4 触发器的old和new区别

after触发器—是在记录操纵之后触发,是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作

before触发器—是在记录操纵之前触发,是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作,如:我们在触发之前需要判断new值和old值的大小或关系,如果满足要求就触发,不通过就修改再触发;如:表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分,这里before相当于设置了断点,我们可以处理删除外键。

对于INSERT语句, 只有NEW是合法的;

对于DELETE语句,只有OLD才合法;

对于UPDATE语句,NEW、OLD可以同时使用。

4.2 删除触发器

DROP TRIGGER 触发器名;

4.3 查看触发器

SHOW TRIGGERS\G;

MySql简单入门_第四篇 高级使用(4)_触发器相关推荐

  1. 编程实现将rdd转换为dataframe:源文件内容如下(_第四篇|Spark Streaming编程指南(1)

    Spark Streaming是构建在Spark Core基础之上的流处理框架,是Spark非常重要的组成部分.Spark Streaming于2013年2月在Spark0.7.0版本中引入,发展至今 ...

  2. 《Autosar从入门到精通-实战篇》总目录_培训教程持续更新中...

    目录 一.Autosar入门篇: 1.1 DBC专题(共9篇) 1.2 ARXML专题(共35篇) 1.2.1 CAN Matrix Arxml(共28篇) 1.2.2 ASWC Arxml(共7篇) ...

  3. MySQL简单入门教程

    http://www.ahnu.edu.cn/homepage/info_read.php?id=66183&cata_0=%B0%B2%BB%D5%CA%A6%B7%B6%B4%F3%D1% ...

  4. MySQL数据库的函数与分组_第四篇(一万字非常详细)

    前言 一.创建计算字段 1. 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式. 例如,如果想在一个字段中既显示公司名,又显示公司的地址,但这两个信息一般包含在不同的表列中.我们需要直接从 ...

  5. 阿波罗数据集怎么下载_携程Apollo简单入门教程这一篇就够了

    1. Apollo背景 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善的权限.审核机制-- 废话不多说,参考官方文档 如果不想看文档, 也没关系, 跟着我一步 ...

  6. 【MySQL从入门到精通】【高级篇】(九)InnoDB的B+树索引的注意事项

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.

  7. 【MySQL从入门到精通】【高级篇】(一)字符集的修改与底层原理

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.

  8. 【MySQL从入门到精通】【高级篇】(二十六)建了索引就能用么?我看未必。来看看几种索引失效的情况吧

    您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦.

  9. 【MySQL从入门到精通】【高级篇】(二十)适合创建索引的11种情况不适合创建索引的7种情况,万字长文

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦.

最新文章

  1. iOS用户设计指南 - 平台特征
  2. 判断是否是闰年的方法,很简单噢
  3. linux ora 01092,ORA-01173的模拟与故障处理
  4. 星来客机器人餐厅_在50米高空聚餐,在铁窗内吃饭,盘点全球特色餐厅,看看有多奇葩...
  5. emacs .emacs_使用Emacs进行社交并跟踪您的待办事项列表
  6. timestamp类型的数据如何赋值_VBA一组代码如何搞定赋值给数组arr及回填数据给工作表...
  7. 关于setInterval和setTImeout中的this指向问题
  8. Freemarker 最简单的例子程序
  9. uploadify 上传文件出现HTTP 404错误
  10. stm32如何执行软复位_stm32f7软件复位 stm32f0 软件复位
  11. 简单测试.NET开源的PDF文档生成器QuestPDF
  12. 如何用云计算提高员工工作效率
  13. 高电平输入好还是rca输入好_dsp高电平和低电平输入哪个好
  14. word论文页眉的横线怎么删除去掉
  15. 小米手机NFC复制门禁卡读取芯片信息失败,报错103解决办法。
  16. 日常开发记录-'npm' 不是内部或外部命令,也不是可运行的程序 或批处理文件。...
  17. 【leetcode 5417. 定长子串中元音的最大数目】 Python 解题思路
  18. response导出html到word
  19. 计算机网络基础知识——(一)
  20. ue4怎么用虚幻商城场景_如何利用虚幻商城创造被动收入【经验分享】

热门文章

  1. 解读机器人视觉类别及应用原理
  2. [Codeforces Gym 101651/100725B] Banal Tickets
  3. 同态滤波 matlab,基于Matlab的同态滤波器的优化设计
  4. tinymce富文本框照片上传
  5. 【Python 】常用命令、函数和格式(记忆版)
  6. 信息与电脑杂志信息与电脑杂志社信息与电脑编辑部2022年第8期目录
  7. 在服务器上部署自己的h5页面用于微信内部浏览器打开
  8. C/C++ 函数(最大公约数)
  9. 路由器怎么安装和使用详细
  10. Bootstrap 排版缩写词