触发器(创建、查看、使用、删除)

一、创建触发器

触发器(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

猜你喜欢

转载自www.cnblogs.com/uphold/p/11222004.html
今日推荐