MySQL-快速入门(10)触发器

1、什么是触发器

  触发器是与表有关的命名数据库对象。触发器由事件来触发某个操作。

  触发器是特殊的存储过程,触发器不需要call语句来调用,也不需要手工启动,只需要确定一个预定义的事件发生的时候,就会被MySQL自动调用。

2、创建触发器

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

//trigger_time触发的时机,可以指定before或after;
//trigger_event标识触发事件,包括insert、update、delete;
//trigger_stmt是触发器执行语句。 create trigger trigger_name trigger_time trigger_event on tb_name
for exch row trigger_stmt
mysql> create table account(num int,amount decimal(10,2));
Query OK, 0 rows affected (0.03 sec)

mysql> create trigger ins_num before insert
    -> on account
    -> for each row set @sum=@sum+NEW.amount;
Query OK, 0 rows affected (0.02 sec)

mysql> set @sum=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into account values(1,1.00),(2,2.00);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select @sum;
+------+
| @sum |
+------+
| 3.00 |
+------+
1 row in set (0.00 sec)

mysql>

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

create trigger trigger_name trigger_time trigger_event
on tb_name for exch row 
begin
  ...
end
mysql> create table t1(a1 int);
Query OK, 0 rows affected (0.03 sec)

mysql> create table t2(a2 int);
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter //
mysql> create trigger trigger_insert_t1 before insert
    -> on t1 for each row
    -> begin
    ->   insert into t2 values(NEW.a1);
    -> end//
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;
mysql> insert into t1 values(233);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+------+
| a1   |
+------+
|  233 |
+------+
1 row in set (0.00 sec)

mysql> select * from t2;
+------+
| a2   |
+------+
|  233 |
+------+
1 row in set (0.00 sec)

mysql>

3、查看触发器,2种方式

  1》show triggers

show triggers;

  2》在triggers表中查看触发器信息。

select * from information_schema.triggers where condition;

4、触发器的使用

   在insert、update、delete事件中对数据检查等。

5、删除触发器

drop trigger [schema_name.]trigger_name
原文地址:https://www.cnblogs.com/ZeroMZ/p/11462768.html