数据库——触发器

来源:互联网 发布:sql 父子级联查询 编辑:程序博客网 时间:2024/05/29 12:10

1:定义

    是一种特殊的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。

  after(for) 表示执行代码后,执行触发器
  instead of 表示执行代码前,用已经写好的触发器代替你的操作

2:语法

      Create trigger triggerName        After/before   insert/delete/update  on 表名        For each row //写死        Begin            Sql语句;( insert/delete/update)        end        //After/before(代表触发的时间)         //insert/delete/update(代表监视的事件)        //表名(表名为监视的地点)        //Sql语句;( insert/delete/update)为触发事件

如何在触发器引用行的值
对于insert而言,新增的行用new表示,行中的每一列用new.列表表示
对于delete而言,原本有一行,后被删除想引用被删除的这一行,用old表示
对于update而言,被修改的行,修改之前的数据用old来表示,修改之后的用new表示
删除触发器 Drop trigger triggername;

代码分析://创建两个表,orders订单表,product商品表mysql> select * from product;    -> $(该符号表示结束符)    //delimiter $  告诉MySQL解释器,当碰到$时,才执行命令.mysql> select * from product;    -> $+----+------+-----+| id | name | num |+----+------+-----+|  1 | 牛   |  57 ||  2 | 羊   |  80 ||  3 | 猪   |  80 |+----+------+-----+此时订单表数据为空往订单加入数据mysql> insert into orders(gid,much) values(2,10);insert into orders(gid,much) values(3,5);    -> $Query OK, 1 row affectedQuery OK, 1 row affected(订单拿走羊10只,猪5个,所以最后在商品表里面样的数量由80变为70,猪的数量由80变为75)mysql> select * from product;    -> $+----+------+-----+| id | name | num |+----+------+-----+|  1 | 牛   |  57 ||  2 | 羊   |  70 ||  3 | 猪   |  75 |+----+------+-----+3 rows in setmysql> select * from orders;    -> $+-----+-----+------+| oid | gid | much |+-----+-----+------+|   4 |   2 |   10 ||   5 |   3 |    5 |+-----+-----+------+2 rows in set建立触发器mysql> create trigger tg2 after delete on ordersfor each rowbegin     update product set num=num+old.much where id=old.id;end$Query OK, 0 rows affected删除数据触动mysql> delete from orders where id=3;    -> $Query OK, 1 row affectedmysql> select * from orders;    -> $+-----+-----+------+| oid | gid | much |+-----+-----+------+|   4 |   2 |   10 |+-----+-----+------+1 row in set显示触发器的结果mysql> select * from product;    -> $+----+------+-----+| id | name | num |+----+------+-----+|  1 | 牛   |  57 ||  2 | 羊   |  70 ||  3 | 猪   |  80 |+----+------+-----+3 rows in set
原创粉丝点击