6.6.2 触发器的应用
使用SQL语句创建超市管理系统数据库MIS,并创建数据表商品类别表、商品表、销售表,同时插入测试数据。
创建数据库——MIS
创建数据表——商品类别表
商品类别表数据如下:
商品表数据如下:
【例6.38】创建insert类型触发器trig_goodsinsert,当向商品表中插入一条商品信息时,自动控制库存数量在0~100之间,当输入库存数量小于0时,则按0输入,库存量大于100,则按100输入。
根据题目要求,触发器必须在数据插入表之前完成库存数量的控制,所以使用before insert类型触发器。当向商品表中插入数据时,触发器自动触发,完成库存数量的控制。执行以下语句将触发该触发器。
通过查询语句发现存入数据库的库存数量是100,而不是123。
【例6.39】创建insert类型触发器trig_saleinsert,当向销售表中插入一条销售信息时,自动减少商品表中商品的库存数量。
向商品销售表中插入2条数据,则商品表中商品减少了相同数量。
【例6.40】创建修改类型触发器trig_saledelete,当销售表中删除一条销售信息(退货)时,自动更新商品表中商品的库存数量。
当发生退货现象时,将删除退货的销售记录信息,触发销售表上的delete类型触发器,从而修改相应商品对应的库存。
执行以下删除语句将触发delete类型触发器。
id的值是退货商品销售时的序号。MySQL将自动修改商品库存。将退货商品的数量自动累加到相应商品库存中。
【例6.41】创建修改类型触发器trig_saleupdate,当修改销售表中一条销售信息(增加或减少销售数量)时,自动更新商品表中商品的库存数量。
当发生购买时,商品数量发生变化,将修改销售记录的购买数量,触发销售表上的update类型触发器,从而修改相应商品对应的库存。等同于发生了一次退货和一次购买动作。
执行以下修改语句将触发update类型触发器。
id的值是换货商品销售时的序号。MySQL将自动修改商品库存。将原销售商品的数量自动累加到相应商品库存中,将修改后的商品数量从库存中减掉。
【例6.42】删除触发器trig_saleupdate。