Mysql学习笔记(十二)触发器

什么是触发器?我们什么时候能够使用触发器?

  触发器就是用来监听某个表的变化,当这个表发生变化的时候来触发某种操作..比若说两个表是相互关联的,当我们在对其中一个表格进行操作的同时,另一个表内的数据也需要进行某种操作,那么我们就需要建立一个触发器来监听任何一个表发生的变化,当其中一个表的数据发生变化的同时,触发器里的代码块将会对另一个表格进行对数据的某种操作。。

总而言之,触发器一般是使用在表与表之间的,单个的表建立触发器是没有任何的意义的。。。。

触发器的监听范围:增,删,改

触发的操作:增,删,改

  有点懵,我们来举一个实例。。。比如说一个订餐系统。。其中存在着一个订单数量的数据库,一个外卖样式的数据库。。当客户进行订餐的时候,订单的数量变化的同时,那么外卖样式的数据库信息也要发生变化,这两个表是相互关联的。。总不能我们的库存外卖数量已经空了,我们还能够接受订单吧?一旦出现这种情况,那么必定会出现问题。。。因此我们可以使用触发器来解决这个问题。。。

create table order_form ( order_form_id int not null, //每一种外卖的id order_form_much int not null //每一种外卖允许订的最大数量 ); //建立一个订单表格..... create table food ( food_id int not null, //外卖的id信息 food_name nvarchar(50) not null, //外卖的名字,样式 food_much int not null //外卖的库存量 ); insert into order_form values(1,10),(2,5),(3,15),(4,20),(5,5); //插入数据信息 insert into food values(1,\'澳洲鲍鱼\',10),(2,\'龙虾\',5),(3,\'鱼翅\',15),(4,\'花枝\',20),(5,\'干贝\',5); //插入信息 比如说用户订了一份澳洲鲍鱼,那么food内名字为澳洲鲍鱼的库存数量就需要减一,同时订单内名字为澳洲鲍鱼的数量也需要减一。。。当最大数量减为0的时候,那么就代表库存空了,那么就不再接受客户的订单了.... 这个过程的实现需要触发器。。。基本语法: create trigger trigger_name (after/before insert/update/delete 监听的范围) on table_name for each row begin 一句或者多句sql语句; end; create trigger trg1 after on order_form for each row begin update food set food_much=food_much-1 where food_id=old.order_form_id; //这个old必须要加,否则出错.... end; update order_form set order_form_much=order_form_much-1 where order_form_id=1; //当这句话执行的时候触发器将被触发。。意思就是客户定了一份外卖,那么订单数在减一的同时,库存量同时也要减少.... 这个触发器不灵活,因为客户不可能每次都定一份外卖吧。。有可能订多份。。。我们是可以对订的数量进行判断,但是如果订了1000份,我们总不能判断1000次吧。。。因此我们还可以新建一个表格,里面保存着每一份外卖被订了多少次。。然后通过对这个表保存的信息来修改其他两个表信息.... create table c_count ( id int not null, num int not null default 0, primary key(id); ); 当有订单的时候,我们把订单的数据更新到这个表格内。。 建立触发器。。。 create trigger trg2 after on update on for each row begin update food set food_much=food_much-old.num where food_id=old.id; update food set order_form_much=order_form_much-old.num where order_form_id=old.id; end; update c_count set num=2 where id=3;//触发器被触发。。。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwxdj.html