您好,欢迎访问一九零五行业门户网

MySQL触发器trigger学习_MySQL

触发器:一类特殊的事物,可监视某种数据操作,并触发相关操作(insert/update/delete);表中的某些数据改变,希望同时可以引起其它相关数据改变的需求。作用:变化自动完成某些语句查询,添加程序的灵活性。创建触发器语法:#delimiter $$ //默认情况下,delimiter是分号“;”,sql语句带有;号结尾会报错,没到end就算到结束了,使用delimiter $$作用就是告诉mysql语句的结尾换成以$结束,相应使用end$$结束create trigger test1 #触发器名称(after/before) #触发时间(insert/update/delete) #监视事件on table #监视地点(表名)for each row #mysql必须加的 begin sql1 ... sqlnend;#end$$
查询已有trigger:show triggers删除已有trigger:drop trigger 触发器名称new/old:update触发:old 代表更新前的记录。new 代表更新后的记录.insert触发:old 不能使用。new 代表插入的记录.delete触发:old 代表删除的记录。new 不能使用.
实例操作:goods商品表和ord订单表create table goods(`goods_id` int(10),`name` varchar(20),`num` smallint(4))engine=innodb charset=utf8create table `ord`(`oid` int(10),`gid` int(10),`much` int(10))engine=innodb charset=utf8insert into goods values(1, 'cat', 26),(2, 'dog', 26),(3, 'pig', 26);
1、要求每下一个订单,goods表中的库存相应减少订单的数量。mysql> select * from goods+----------+------+------+| goods_id | name | num |+----------+------+------+| 1 | cat | 26 || 2 | dog | 26 || 3 | pig | 26 |+----------+------+------+3 rows in set (0.00 sec)mysql> select * from ord;empty set (0.00 sec)
#创建触发器test1delimiter $$create trigger test1afterinserton `ord`for each rowbeginupdate goods set num= num - new.much where goods_id = new.gid;end$$
mysql> create trigger test1 -> after -> insert -> on `ord` -> for each row -> begin -> update goods set num= num - new.much where goods_id = new.gid; -> end$$query ok, 0 rows affected (0.00 sec)mysql> insert into `ord` values (1, 2, 2)$$query ok, 1 row affected (0.03 sec)mysql> select * from ord$$+------+------+------+| oid | gid | much |+------+------+------+| 1 | 2 | 2 |+------+------+------+1 row in set (0.00 sec)mysql> select * from goods$$+----------+------+------+| goods_id | name | num |+----------+------+------+| 1 | cat | 26 || 2 | dog | 24 || 3 | pig | 26 |+----------+------+------+3 rows in set (0.00 sec)goods表里面的dog由26变成24
2、用户取消订单后商品库存订单的商品数要正常入库。以下只写触发器trigger,操作过程不写太多比较乱。#触发器test2create trigger test2afterdeleteon `ord`for each rowbeginupdate goods set num = num + old.much where goods_id = old.gid;end $$
3、用户更新订单的时候,商品库存要根据订单的数量正常更新。#触发器test3create trigger test3afterupdateon `ord`for each rowbeginupdate goods set num = num + old.much - new.much where goods_id = new.gid;end$$
查询触发器
删除触发器
其它类似信息

推荐信息