Mysql学习总结(10)——MySql触发器使用讲解

Mysql学习总结(10)——MySql触发器使用讲解

  触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。MySQL从5.0.2版本开始支持触发器。在本文中将讲解的内容包括:
触发器的含义和作用
如何创建触发器
如何查看触发器
如何删除触发器

       触发器是由INSERT、UPDATE和DELETE等事件来触发某种特定操作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。这样做可以保证某些操作之间的一致性。例如,当学生表中增加了一个学生的信息时,学生的总数就必须同时改变。可以在这里创建一个触发器,每次增加一个学生的记录,就执行一次计算学生总数的操作。这样就可以保证每次增加学生的记录后,学生总数是与记录数是一致的。触发器触发的执行语句可能只有一个,也可能有多个。本节将详细讲解创建触发器的方法。

一、语法

创建只有一个执行语句的触发器

MySQL中,创建只有一个执行语句的触发器的基本形式如下:

[sql] 
view plain
copy

  1. CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件  
  2. ON 表名 FOR EACH ROW 执行语句  


创建有多个执行语句的触发器

MySQL中,触发器触发的执行语句可能有多个。创建有多个执行语句的触发器的基本形式如下:

[sql] 
view plain
copy

  1. CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件  
  2. ON 表名 FOR EACH ROW  
  3. BEGIN  
  4. 执行语句列表  
  5. END  

下面来具体说说语法

1、命名规则

[sql] 
view plain
copy

  1. CREATE TRIGGER <触发器名称> <—  
  2. { BEFORE | AFTER }  
  3. { INSERT | UPDATE | DELETE }  
  4. ON <表名称>  
  5. FOR EACH ROW  
  6. BEGIN  
  7. <触发器SQL语句>  
  8. END  

触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.


2、触发时间: BEFORE | AFTER 


触发器有执行的时间设置:INSERT | UPDATE | DELETE 


3、触发事件前后


同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。


4.、表


触发器是属于某一个表的:当在这个表上执行插入、


更新或删除操作的时候就导致触发器的激活.


我们不能给同一张表的同一个事件安排两个触发器。


5.、( 步长)触发间隔


触发器的执行间隔:FOR EACH ROW子句通知触发器


每隔一行执行一次动作,而不是对整个表执行一次。


6、 语句


触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句,


包括复合语句,但是这里的语句受的限制和函数的一样。


Privileges权限


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

二、关于旧的和新创建的列的标识

     在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要修改列名),还有列的旧名存在。因此你必须用这样的语法来标识: “NEW . column_name”或者”OLD . column_name”.这样在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量(”transition variables”)。 

      对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在和NEW以及OLD同时使用。

三、使用范例

先创建两个表、一个订单表,一个订单时间表

[sql] 
view plain
copy

  1. CREATE TABLE T_ORDER(  
  2. ORDER_NUM INT PRIMARY KEY,  
  3. ORDER_NAME CHAR(10) NOT NULL  
  4. );  
  5. CREATE TABLE T_ORDER_TIME(  
  6. ORDER_NUM INT PRIMARY KEY,  
  7. ORDER_TIME TIMESTAMP NOT NULL,  
  8. )  

1、创建插入时的触发器

[sql] 
view plain
copy

  1. CREATE TRIGGER TRI_INSERT  
  2. AFTER INSERT ON T_ORDER FOR EACH ROW  
  3. BEGIN  
  4. INSERT INTO learning.t_order_time(ORDER_NUM,ORDER_TIME) VALUES(NEW.ORDER_NUM,NOW());  
  5. END  

然后订单表中插入一条数据

[sql] 
view plain
copy

  1. INSERT INTO T_ORDER(ORDER_NUM,ORDER_NAME) VALUES(1,‘电脑’);  
  2. SELECT * FROM t_order;  
  3. SELECT * FROM t_order_time;  

这是订单表中插入的数据:

Mysql学习总结(10)——MySql触发器使用讲解

这是订单时间表中自动插入的数据:

Mysql学习总结(10)——MySql触发器使用讲解

2、更新时插入数据

[sql] 
view plain
copy

  1. //更新创建触发器  
  2. CREATE TRIGGER TRI_UPDATA  
  3. BEFORE UPDATE ON T_ORDER FOR EACH ROW  
  4. BEGIN  
  5. UPDATE  learning.t_order_time SET ORDER_TIME=NOW() WHERE OLD.ORDER_NUM=ORDER_NUM;  
  6. END  
  7.   
  8. UPDATE T_ORDER  SET ORDER_NAME=‘饼干饼’ WHERE ORDER_NUM=1;  
  9. SELECT * FROM t_order;  
  10. SELECT * FROM t_order_time;  

Mysql学习总结(10)——MySql触发器使用讲解

可以看到,时间已经更新

3、创建删除触发器

[java] 
view plain
copy

  1. //创建删除触发器  
  2. CREATE TRIGGER TRI_DELETE  
  3. AFTER DELETE ON T_ORDER FOR EACH ROW  
  4. BEGIN  
  5. DELETE FROM  learning.t_order_time  WHERE OLD.ORDER_NUM=ORDER_NUM;  
  6. END  
  7.   
  8. DELETE FROM  learning.t_order  WHERE ORDER_NUM=1;  
  9. SELECT * FROM t_order;  
  10. SELECT * FROM t_order_time;  

可以看到,数据库中都没有数据了。

Mysql学习总结(10)——MySql触发器使用讲解

4、查看触发器

查看触发器是指查看数据库中已存在的触发器的定义、状态和语法等信息。查看触发器的方法包括SHOW TRIGGERS语句和查询information_schema数据库下的triggers表等。本节将详细讲解查看触发器的方法。

MySQL中,可以执行SHOW TRIGGERS语句来查看触发器的基本信息。其基本形式如下:

SHOW TRIGGERS ;

Mysql学习总结(10)——MySql触发器使用讲解

MySQL中,所有触发器的定义都存在information_schema数据库下的triggers表中。查询triggers表,可以查看到数据库中所有触发器的详细信息。查询的语句如下:

SELECT *  FROM  information_schema.triggers;

Mysql学习总结(10)——MySql触发器使用讲解

5、删除触发器

[sql] 
view plain
copy

  1. DROP TRIGGER 触发器名  

6、触发器 与存储过程
触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL
(允许存储程序通过参数将数据返回触发程序)。 
而存储过程 可以接受参数,将结果范围给应用程序

转载于:https://my.oschina.net/zhanghaiyang/blog/606092

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100861.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java XML解析工具类

    Java XML解析工具类JavaXML解析工具类Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类本身是有个需求,讲三方公司的XML请求文件中的Response里的属性赋值成java对象,没做完不需要了,只做到了解析,后续本来想利用解析出来的key进行遍历,利用FTL模板生成Java文件,有这个需求的小伙伴可以延续这个工具类。1.看看XML<?xmlversion=”1.0″encoding=”utf-8″?><!–每个协议有Request或Resp

    2022年7月21日
  • winform去掉右上角关闭按钮

    一种方法是可以在窗体的属性面板将窗体的ControlBox属性设置为false,或者在窗体的构造函数中这样写:1publicForm1()23{45InitializeComponen

    2021年12月21日
  • 【罗盘时钟(星空版)—使用html,js,css编写。(附全部源代码+效果)】[通俗易懂]

    【罗盘时钟(星空版)—使用html,js,css编写。(附全部源代码+效果)】[通俗易懂]效果换个背景:源代码index.html<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”UTF-8″><title>CSDN—追梦者</title><linkrel=”stylesheet”href=”css/clock.css”></head><body><ulclass=”clock”id=”

    2022年6月28日
  • Linux内核开发_1_编译LInux内核

    Linux内核开发_1_编译LInux内核1.准备工作1.1学习环境本系列教程使用的环境如下:操作系统版本:Linuxubuntu18.04Linux内核版本:cat/proc/versionLinuxversion4.15.0-20-generic(buildd@lgw01-amd64-039)\(gccversion7.3.0(Ubuntu7.3.0-16ubuntu3))#21-UbuntuSMPTueApr2406:16:15UTC2018…

    2022年7月23日
  • 爬虫遇到js动态渲染问题

    爬虫遇到js动态渲染问题爬虫遇到js动态渲染问题时间:2020年6月3日10:28:48作者:钟健概要:关于scrapy爬虫应对网页JavaScript动态渲染问题关键字:scrapycrapy-splash一、传统爬虫的问题scrapy爬虫与传统爬虫一样,都是通过访问服务器端的网页,获取网页内容,最终都是通过对于网页内容的分析来获取数据,这样的弊端就在于他更适用于静态网页的爬取,而面对js渲染的动态网页就有点力不从心了,因为通过js渲染出来的动态网页的内容与网页文件内容是不一样的。1.实际案例腾讯招聘:ht

    2022年7月26日
  • springboot后端_搭建javaweb开发环境

    springboot后端_搭建javaweb开发环境基于JAVAspringboot+VUE前后分类疫情防疫平台《精品毕设》源码+sql+论文:主要实现系统管理、疫情实时状态、每日健康打卡、复工申请、审核、历史出行数据、通知公告等具体功能设计

    2022年8月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号