MySQL触发器相关知识

1、什么是触发器

        触发器(trigger)是mysql的数据库对象之一,是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时(这些事件包括insert、update、delete三种),将调用该对象,即表的操作事件触发表上的触发器的执行。

2、触发器的作用

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

        例如,当学生表中增加了一个学生信息时,学生的总数就必须同时改变。可以在这里创建一个触发器,每次增加一个学生的记录,就执行一次计算学生总数的操作。这样就可以保证每次增加学生的记录后,学生总数是与记录数一致的。触发器触发的执行语句可能有一个,也可能有多个。

3、触发器的特性?

  • 什么时候触发?before/after, 在insert、update、delete 之前或者之后?
  • 什么条件触发?insert还是update还是delete
  • 触发频率:针对每一行执行  for each row
  • 触发器定义在哪个表上? on Tablename

4、创建触发器

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

-- 1、创建只有一个执行语句的触发器
create trigger 触发器名 before | after 触发事件 
on 表名 for each row 
执行语句
  • 触发器名称,指要创建的自定义触发器的名字,通常使用trigger_ 或 tg_为前缀。
  • before和after参数指定了触发器执行的时间,“before”指在触发事件之前执行触发语句,after表示在触发事件之后执行触发语句。
  • 触发事件:指触发的条件,其中包括insert、update和delete;
  • “表名”参数指触发事件操作的表的名称;
  • for each row表示任何一条记录上的操作满足触发事件都会触发该触发器;
  • “执行语句”参数指触发器被触发后执行的程序。

例:在account表上创建一个触发器:当account表执行insert操作之前(before),先向user_info 表中写一条user_id = 99, realname = 'niuhehe'的数据

-- 创建触发器语句
mysql> create trigger tg_insert_account before insert on account
    -> for each row 
    -> insert into user_info set user_id = 99, realname = 'niuhehe'
    -> ;
Query OK, 0 rows affected (0.01 sec)

-- account表执行 insert 动作
mysql> 
mysql> insert into account(`name`, `balance`) values('niuhehe', 125);
Query OK, 1 row affected (0.01 sec)

-- 则user_info表自动写入了一条我们设置好的数据
mysql> select * from user_info;
+----+---------+----------+------+-----------+-----------+-----------+
| id | user_id | realname | age  | sheng     | shi       | xian      |
+----+---------+----------+------+-----------+-----------+-----------+
|  1 |       1 | 张三     |   15 | 山东省    | 菏泽市    | 牡丹区    |
|  5 |      99 | niuhehe  | NULL | NULL      | NULL      | NULL      |
+----+---------+----------+------+-----------+-----------+-----------+
5 rows in set (0.00 sec)

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

create trigger 触发器名 before | after 触发事件
on 表名 for each row
begin
	执行语句列表
end
  • begin与end之间的“执行语句列表”参数表示需要执行的多个执行语句的内容。不同的执行语句之间用英文分号隔开。
  • 一般情况下,MySQL默认是以“;” 作为结束执行语句。在创建触发器过程中需要用到“;”。为了解决这个问题,可以用delimiter语句指定结束符号。如“delimiter &&”,可以将结束符号由默认的分号变成“&&”。当触发器创建完成后,可以用命令“delimiter;”来将结束符号再变会系统默认的“;”。

例:在account表上创建一个触发器:当此表执行update操作时,执行以下动作:

向p_user表中写一条 name = 'liuhaha' 的数据

向p_user_info表中写一条 realname = 'liuhaha'的数据

mysql> delimiter &&  -- 指定结束符号 为 &&
mysql> create trigger tg_account_update before update
    -> on account for each row
    -> begin
    -> insert into p_user set `name` = 'liuhaha';
    -> insert into p_user_info set realname = 'liuhaha';
    -> end
    -> &&
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;    -- 触发器创建语句完成后再指定回来
mysql> 

5、查看触发器

(1)通过 show triggers 查看所有触发器

-- 列出所有触发器
show triggers;

MySQL触发器相关知识_第1张图片

 (2)通过系统triggers表查看触发器

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

select * from information_schema.triggers;

此语法显示了所有数据库中的触发器,我们可以通过指定字段指定条件来筛选我们需要的数据。

6、删除触发器

-- 删除触发器
drop trigger 触发器名称;

你可能感兴趣的:(Mysql,数据库)