我是靠谱客的博主 飞快芝麻,最近开发中收集的这篇文章主要介绍MySQL数据库——触发器(六)一、概述二、创建触发器三、查看触发器四、删除触发器五、使用触发器六、对触发器的进一步说明,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、概述

二、创建触发器

三、查看触发器

四、删除触发器

五、使用触发器

1.INSERT触发器

2.DELETE触发器

3.UPDATE触发器

4.包含多条执行语句【BEGIN...END】

六、对触发器的进一步说明


一、概述

触发器是一个被关联到一个表数据库对象,当该表的特定事件发生时,它才会被触发

触发器与表的联系十分密切,用于保护数据库中数据的完整性多个表之间数据的一致性

如:

  • 增加一个用户信息到数据库中的基本信息表时,检查其电话号码格式是否正确
  • 当用户订购一个产品时,要从产品库存量减去订购的数量

二、创建触发器

格式:

CREATE TRIGGER 触发器名 触发时间 触发事件 ON 表名 FOR EACH ROW 触发器动作主体
  •  触发时间:BEFORE和AFTER
    • BEFORE:触发器是在激活它的语句之前触发
    • AFTER:触发器是在激活它的语句之后触发
  • 触发事件:INSERT、UPDATE和DELETE
    • INSERT:向表中插入新行时激活触发器
    • UPDATE:更改表中某一行时激活触发器
    • DELETE:从表中删除某一行时激活触发器
  • 表名:一个表中不能同时有两个BEFORE UPDATE触发器,可以有一个BEFORE UPDATE 和 BEFORE INSERT触发器 或者 BEFORE UPDATE 和 AFTER UPDATE触发器
  • FOR EACH ROW:用来指定受触发事件影响的每一行都要激活触发器的动作
  • 触发器动作主体:包含触发器被激活时要执行的SQL语句【多个语句可用BEGIN...END复合语句结构---详情请看第五节-使用触发器
  • 注意:
    • 每个表每个事件只允许一个触发器
    • 每个表最多支持6个触发器【INSERT、UPDATE、DELETE的之前与之后】

Example:

  • Explanation:
    • 每次向student 表中插入一行数据后将student变量[-变量名自定义-]设置为“add new student”

        

三、查看触发器

格式:

SHOW TRIGGERS [FROM 表名] [G];

Example:

  • Trigger:触发器名
  • Event:触发事件
  • Table:表名
  • Statement:触发动作
  • Timing:触发时间
  • Created:触发器创建时间

四、删除触发器

格式:

 DROP TRIGGER [IF EXISTS] 触发器名;

Example:

 注意:

  • 删除一个表的同时会自动删除该表上的触发器
  • 触发器不能更新或覆盖,如果要修改触发器,必须先删除后再重新创建

五、使用触发器

1.INSERT触发器

格式:

CREATE TRIGGER 触发器名 BEFORE/AFTER INSERT ON 表名 FOR EACH ROW 触发器动作主体
  • INSERT触发器代码内可引用一个名为NEW的虚拟表访问被插入的行
  • BEFORE INSERT触发器中NEW中的值也可以被更新,即允许更改被插入的值
  • 对于约束为AUTO_INCREMENT列,NEW在INSERT执行之前包含的是0,插入之后包含新的自动生成值 

Example:

1.简单了解


 2.关于名为NEW的虚拟表


2.DELETE触发器

格式:

CREATE TRIGGER 触发器名 BEFORE/AFTER DELETE ON 表名 FOR EACH ROW 触发器动作主体
  • DELETE触发器代码内可引用一个名为OLD的虚拟表访问被删除的行
  • OLD的值全部是只读的,不能被更新

Example:

1.简单了解


 

 2.关于名为OLD的虚拟表

 


3.UPDATE触发器

格式:

CREATE TRIGGER 触发器名 BEFORE/AFTER UPDATE ON 表名 FOR EACH ROW 触发器动作主体
  • UPDATE触发器代码内可引用一个名为OLD的虚拟表来访问UPDATE语句执行前的值,也可以引用一个名为NEW的虚拟表访问新更新的值
  • BEFORE UPDATE触发器中,NEW中的值可能也被更新,即允许更改将要用于UPDATE语句中的值
  • OLD的值全部是只读的,不能被更新
  • 当触发器涉及对表自身的更新操作时,只能使用BEFORE UPDATE触发器而AFTER UPDATE触发器将不被允许

Example:


4.包含多条执行语句【BEGIN...END】


分号一般作为SQL语句的结束符号,但在触发器中,要执行多条语句时就很不方便,所以可以利用关键字DELIMITER来实现多条SQL语句的执行

结构如下:

  • DELIMITER $$
  • $$ DELIMITER;

  • 如有无法退出的情况发生,输入$$+按下回车键即可

六、对触发器的进一步说明

  • 目前MySql版本所支持的触发器还比较初级
  • 创建触发器可能需要特殊的安全访问权限,但触发器的执行是自动的
  • 应该多用触发器保证数据的一致性,完整性和正确性
  • 创建跟踪——可使用触发器把更改之前和更改之后的状态记录到另一张表中

最后

以上就是飞快芝麻为你收集整理的MySQL数据库——触发器(六)一、概述二、创建触发器三、查看触发器四、删除触发器五、使用触发器六、对触发器的进一步说明的全部内容,希望文章能够帮你解决MySQL数据库——触发器(六)一、概述二、创建触发器三、查看触发器四、删除触发器五、使用触发器六、对触发器的进一步说明所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部