zoukankan      html  css  js  c++  java
  • 触发器(创建、查看、使用、删除)

    一、创建触发器

    触发器(TRIGGER)是由 INSERTUPDATE DELETE 等事件来触发某种特定操作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。这样可以保证某些操作之间的一致性。

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

    CREATE  TRIGGER  触发器名  BEFORE | AFTER  触发事件

    ON   表名  FOR  EACH ROW 执行语句

    其中,触发器名  参数指要创建的触发器的名字;BEFORE AFTER 参数指定触发器执行的时间,BEFORE 指在触发事件之前执行触发语句,AFTER 指在触发事件之后执行触发语句; 触发事件  参数指触发的条件,其中包括 INSERTUPDATE DELETE;表名 参数指触发事件操作的表的名称;FOR EACH ROW 表示任何一条记录上的操作满足触发事件都会触发该触发器;执行语句  参数 指触发器被触发后执行的程序。

    mysql> CREATE TRIGGER dept_trig1 BEFORE INSERT

        -> ON department FOR EACH ROW

        -> INSERT INTO triger_time VALUES(NOW());

    说明:当向department 表中执行INSERT 操作时,数据库系统都会在 INSERT 语句执行之前向 triger_time 表中插入当前时间。

    2、创建有多个执行语句的触发器,基本形式如下:

    CREATE  TRIGGER  触发器名  BEFORE | AFTER  触发事件

    ON  表名  FOR  EACH  ROW

    BEGIN

    执行语句列表

    END

    其中,BEGIN END 中间的 执行语句列表 参数表示需要执行的多个执行语句的内容。不同的执行语句之间用分号隔开。

    一般情况下MySQL默认是以";"(分号)作为结束执行语句。在创建触发器过程中需要用到分号,为了解决这个问题,可以用DELIMITER 语句。如下:

    mysql> DELIMITER &&

    mysql> CREATE TRIGGER dept_trig2 AFTER DELETE

        -> ON department FOR EACH ROW

        -> BEGIN

        -> INSERT INTO trigger_time VALUES('21:01:01');                                            

        -> INSERT INTO trigger_time VALUES('22:01:01');                                            

        -> END

        -> &&

    二、查看触发器

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

    mysql> SHOW TRIGGERS G 查询所有触发器的信息,不能查询指定的触发器

    mysql> SELECT * FROM information_schema.triggers G 查询tiggers中的信息,会显示所有触发器的详细信息

    mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='dept_trig1' G 只查询dept_trig1触发器的详细信息。

    、触发器的使用

    MySQL中,触发器执行的顺序是 BEFORE 触发器、表操作(INSERTUPDATE DELETE) AFTER 触发器。

    department 表上创建BEFORE INSERT AFTER INSERT 这两个触发器。

    mysql> CREATE TRIGGER before_insert BEFORE INSERT

        -> ON department FOR EACH ROW

        -> INSERT INTO trigger_test VALUES(null,"before_insert"); 创建BEFORE INSERT 触发器

    mysql> CREATE TRIGGER after_insert AFTER INSERT

        -> ON department FOR EACH ROW

        -> INSERT INTO trigger_test VALUES(null,"after_insert"); 创建AFTER INSERT 触发器

    mysql> INSERT INTO department VALUES(1003,'HAOHOA','HELLO','YES'); department插入一条记录用来实验前面两个触发器的动作先后顺序。

    mysql> SELECT * FROM trigger_test; 可以查看到BEFORE INSERT 先于AFTER INSERT动作

    +----+---------------+

    | id | info          |

    +----+---------------+

    | 1 | before_insert |

    | 2 |   after_insert  |

    +----+---------------+

    1 row in set (0.00 sec)

    、删除触发器

    删除触发器指删除数据库中已经存在的触发器。基本形式如下:

    DROP  TRIGGER  触发器名 | 数据库名.触发器名;

    其中,触发器名  参数指要删除的触发器的名称。如果只指定触发器名称,数据库系统会在当前数据库下查找该触发器,如果找到就删除。 触发器名 | 数据库名.触发器名 表示两者选其中一个。不再需要的触发器一定要删除掉。

    mysql> DROP TRIGGER test2.dept_trig1; 指定删除数据库test2下的触发器dept_trig1,如果不指定数据库test2,则删除当前数据库下的触发器dept_trig1

  • 相关阅读:
    jdk8:垃圾收集器
    Young GC和Full GC分别在什么情况下会发生?
    GC之Minor/Young/Major GC的区别
    Java的JJWT实现JWT
    什么是 JWT -- JSON WEB TOKEN
    Spring的两种动态代理:Jdk和Cglib 的区别和实现
    java对象结构 对象头 Markword
    偏向锁跟可重入性有什么区别
    C# 加密算法[汇总]
    Java语言:JAVA8 十大新特性详解(zz)
  • 原文地址:https://www.cnblogs.com/uphold/p/11222004.html
Copyright © 2011-2022 走看看