1.触发器介绍

  • 触发器是一个被指定关联到一个表的数据库对象,当对一个表的特定事件出现时,将会被激活。
  • mysqk触发器只支持:INSERT、UPDATE、DELETE语句。
  • 每个表每个事件每次只允许一个触发器,因此,每个表最多支持6个触发器。

2.创建触发器

create
TRIGGER trigger_name trigger_time trigger_event
ON tb_name FOR EACH ROW trigger_body # trigger_name:触发器名称。
# trigger_time:触发器被触发的时该。即使用DEFORE、AFTER用于表示触发器是在激活它的语句之前或者之后触发。如果希望验证新数据是否满足使用的限制,则使用BEFORE;如果希望在激活触发器的语句执行之后完成几个或更多的改变,通过使用AFTER。
# trigger_event:触发事件,用于指定激活触发器的语句的种类。(INSERT、UPDATE、DELETE)。
# tb_name:与触发器相关联的表名。
# FOR EACH ROW:指定对于受触发事件影响的每一行都要激活触发器的动作。
# trigger_body:触发器动作主体,包含触发器激活时将要执行的mysql语句。
# 在表tb_student中创建一个触发器tb_student_insert_trigger,用于每次向表tb_student中插入一行数据时将学生变量str的值设置为”on student added!“
create trigger tb_student_insert_trigger after insert on tb_student FOR EACH ROW SET @ str='on student added!'; insert into tb_student values('','张晓勇','男','1997-12-11','山西','汉','AC1301'); select @ str; # 验证触发器

3.查看触发器

SHOW TRIGGERS [{FROM | IN} db_name]

4.删除触发器

DROP TRIGGER [IF EXISTS] trigger_name
删除tb_student表的触发器tb_student_insert_trigger
drop trigger if exists tb_student_trigger;
  • 当删除表时,会自动删除该表相关联的触发器。
  • 触发器不能更新与覆盖,如果需要修改触发器,必须先删除,然后再创建。

5.使用触发器

5.1 INSERT触发器

insert触发器可以在insert语句执行之前或之后执行。需要注意的点:

  • 在insert触发器代码内可引用一个NEW的虚拟表来访问被插入的行。
  • 在before insert触发器中,NEW中的值也可以被更新,即允许更改被插入的值。
  • 在AUTO_INCREMENT列,NEW在insert执行之前是0,在insert执行之后将。
# 在表tb_student中重新创建触发器tb_student_insert_trigger,用于每次向表tb_student中插入一行数据时将学生变量str的值设置为新插入学生的学号。
create trigger tb_student_insert_trigger AFTER INSERT on tb_student FOR EACH ROW SET @ str=NEW.studentNo;

5.2 DELETE触发器

DELETE触发器可以在DELETE语句执行之前或之后执行。需要注意的点:

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

5.3 UPDATE触发器

UPDATE触发器在UPDATE语句执行之前或之后执行。需要注意的点:

  • 在UPDATE触发器代码内可以引用一个名为OLD的虚拟表访问以前的值,也可以引用一个名为NEW的虚拟表访问新更新的值。
  • 在BEFORE UPDATE触发器中,NEW中的值可能也被更新,即允许更改将要用于UPDATE语句中的值。
  • OLD中的值全部是只读的,不能被更新。
  • 当触发器涉及对表自身的更新操作时,只能使用BEFORE UPDATE触发器,不能使用AFTER UPDATE触发器。
# 在表tb_student中创建一个触发器tb_student_update_trigger,用于每次更新tb_student时将该表中nation列的值设置为native列的值。
create trigger tb_student_update_trigger BEFORE UPDATE ON tb_student FOR EACH ROW SET NEW.nation=OLD.native; update tb_student SET nation='壮' where studentName='张晓勇';

笔记-8:mysql触发器的更多相关文章

  1. MySQL笔记 存储过程 游标 触发器

    第二十三章 使用存储过程 MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成 存储过程简单来说,就 ...

  2. MYSQL进阶学习笔记七:MySQL触发器的创建,应用及管理!(视频序号:进阶_16,17)

    知识点八:MySQL触发器的应用(16,17) 触发器的定义: 什么是触发器: 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据是触发执行,他比数据库本身标准的功能有更精细和更复杂的数据 ...

  3. 【笔记】MySQL的基础学习(二)

    [笔记]MySQL的基础学习(二) MySQL 老男孩  一 视图 视图其实就是给表起个别名 1.创建视图 格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v1 AS ...

  4. MySQL触发器如何正确使用

    MySQL触发器如何正确使用 2010-05-18 15:58 佚名 博客园 字号:T | T 我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发器的语句创建,触发时 ...

  5. 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)

    1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...

  6. mysql笔记04 MySQL高级特性

    MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...

  7. redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)

    一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...

  8. mysql触发器的例子--插入前更新数据

    本文介绍下,一个mysql触发器的例子,在数据插入前更新相关内容,有需要的朋友参考下. mysql触发器的例子,如下: view source print? 001 mysql> CREATE  ...

  9. mysql触发器的作用及语法

    触发器是一种特殊的存储过程,它在插入,删除或改动特定表中的数据时触发运行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有下面的作用: 1.安全性.能够基于数据库的值使用户具有 ...

  10. MySQL 触发器结构及三个案例demo

    --你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了.这跟SQL的标准有所不同. CREATE TRIGGER语法 CREATE TRIGG ...

随机推荐

  1. Java基本的线程操作(附代码)

    啦啦啦啦,从头整理一遍java并发的内容.开始是基本的线程操作 线程状态切换: 新建线程: @Test public void newTread(){ Thread t1 = new Thread(n ...

  2. [信息收集]Nmap命令详解

    0x00[介绍] Nmap,也就是Network Mapper,中文为"网络映射器". Nmap是一款开源的网络探测和安全审核的工具,它的设计目标是快速地扫描大型网络. 它是网络管 ...

  3. 为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法如下

    为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?低版本中不是至少可以存储4个汉字吗?原因这个问题仍然与编码类型有关.ArcGIS 10.2 以及更早的版本,ArcGIS ...

  4. (四)OpenCV-Python学习—形态学处理

    通过阈值化分割可以得到二值图,但往往会出现图像中物体形态不完整,变的残缺,可以通过形态学处理,使其变得丰满,或者去除掉多余的像素.常用的形态学处理算法包括:腐蚀,膨胀,开运算,闭运算,形态学梯度,顶帽 ...

  5. madam、Linux LVM的使用

    .RaidRAID(独立冗余磁盘阵列)概念:RAID技术通过把多个硬盘设备组合成一个容量更大.安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提 ...

  6. Web安全测试检查点

    Web安全测试检查点 上传功能 1.绕过文件上传检查功能 2.上传文件大小和次数限制 注册功能 1.注册请求是否安全传输 2.注册时密码复杂度是否后台检验 3.激活链接测试 4.重复注册 5.批量注册 ...

  7. [webpack]深入学习webpack核心模块tapable

    一.手动实现同步钩子函数 1.SyncHook class SyncHook { // 钩子是同步的 constructor(args){ this.tasks = []; } tap(name,ta ...

  8. 002-创建型-04-建造者模式(Builder)、JDK1.7源码中的建造者模式、Spring中的建造者模式

    一.概述 建造者模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象 ...

  9. 最简单的freemarker用法实例

          1.下载freemarker-2.3.19.jar到web项目的lib下. 2.新建freemarker引擎协助类 package com.bxsurvey.sys.process.uti ...

  10. 导出 VuePress构建的网站为 PDF

    前言 学 Rust 也有一段时间了,网上也有不少官方文档的中文翻译版,但是似乎只有 Rust中文网站 文档一直是最新的,奈何并没有 PDF 供直接下载,是在是不太方便,为了方便阅读以及方便后续文档更新 ...