mysql 触发器简单操作

1.触发器的引入

       触发器(TRIGGER)是由事件来触发某个操作。这些时间包括insert语句、update语句和delete语句,当数据库系统执行这些事件时,就会激活触发器执行相应的操作。

2.创建与使用触发器

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

语法:

create trigger 触发器名 before/after 触发事件

on 表名 for each row 执行语句

操作步骤:

step1: 首先创建两张表 book 、booktype

step2:.创建一个只执行一条语句的触发器,实现book里插入一本书,booktype对应的类型书的bookNum数量加1

mysql> create trigger trig_book after insert
    -> on book for each row
    -> update booktype set bookNum=bookNum+1 where new.bookTypeId=booktype.id;

step3:查询触发器执行结果:

mysql> insert into book values(null,'深入理解java',1);
Query OK, 1 row affected (0.35 sec)

mysql> select * from book;
+----+------------------+------------+
| id | name             | bookTypeId |
+----+------------------+------------+
|  1 | 深入理解java     |          1 |
+----+------------------+------------+
1 row in set (0.00 sec)

mysql> select * from booktype;
+----+--------------+---------+
| id | bookType     | bookNum |
+----+--------------+---------+
|  1 | 计算机类     |       1 |
|  2 | 文学类       |       0 |
|  3 | 教育类       |       0 |
|  4 | 生物类       |       0 |
|  5 | 其他         |       0 |
+----+--------------+---------+
5 rows in set (0.00 sec)

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

语法:

create trigger 触发器名 before/after 触发事件

on 表名 for each row

  begin

    执行语句列表

  end

操作步骤:

step1:由于想要使用删除命令,于是往表中多插入了几行数据,两个表现在的状态如下:

      

step2:因为要进行多个语句,因此又创建了一个book_log表

step3:进行创建有多个执行语句的触发器,实现book里删除一本书,booktype对应的类型书的bookNum数量减1,book_log里增加一行删除日志。

mysql> delimiter ||
mysql> create trigger trig_book2 after delete
    -> on book  for each row
    -> begin
    -> update booktype set bookNum=bookNum-1 where old.bookTypeId=booktype.id;
    -> insert into book_log values(null,now(),"删除了一条数据");
    -> end||
Query OK, 0 rows affected (0.08 sec)
mysql>  delimiter ;

step4:查询创建结果

mysql> delete from book where id=2;
Query OK, 1 row affected (0.06 sec)

mysql>  select * from book;
+----+------------------+------------+
| id | name             | bookTypeId |
+----+------------------+------------+
|  1 | 深入理解java     |          1 |
|  3 | 学前教育         |          3 |
|  4 | 生物与科学       |          4 |
+----+------------------+------------+
3 rows in set (0.00 sec)

mysql>  select * from booktype;
+----+--------------+---------+
| id | bookType     | bookNum |
+----+--------------+---------+
|  1 | 计算机类     |       1 |
|  2 | 文学类       |       0 |
|  3 | 教育类       |       1 |
|  4 | 生物类       |       1 |
|  5 | 其他         |       0 |
+----+--------------+---------+
5 rows in set (0.00 sec)

mysql>  select * from book_log;
+----+---------------------+-----------------------+
| id | time                | log                   |
+----+---------------------+-----------------------+
|  2 | 2019-05-02 20:02:18 | 删除了一条数据        |
+----+---------------------+-----------------------+
1 row in set (0.00 sec)

3.查看触发器

1.show triggers 语句查看触发器信息

mysql> show triggers;

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

4.删除触发器

drop trigger 触发器名

mysql> drop trigger trig_book2;

猜你喜欢

转载自blog.csdn.net/qq_42922647/article/details/89763706
今日推荐