数据库——触发器

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 affected

Query 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 set
mysql> select * from orders;
    -> $
+-----+-----+------+
| oid | gid | much |
+-----+-----+------+
|   4 |   2 |   10 |
|   5 |   3 |    5 |
+-----+-----+------+
2 rows in set

建立触发器

mysql> create trigger tg2
 after delete on orders
for each row
begin 
    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 affected

mysql> 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值