数据库技术项目式教程(MySQL)课件 项目9 事务、游标和触发器.pptx
使用事务;任务提出;银行转账:假定资金从张三账户转到李四账户,至少需要两步:
张三账户的资金减少;
然后李四账户的资金相应增加。
;任务分析;1.事务概述;2.事务四大特征(ACID);3.管理事务的语句;【例2】使用事务来解决上述转账问题。
CREATEPROCEDUREchangemoney()
BEGIN
DECLAREt_errorINTDEFAULT0;
DECLARECONTINUEHANDLERFORSQLEXCEPTIONSETt_error=1;
STARTTRANSACTION;
UPDATEbankSETCurrentMoney=CurrentMoney-200WHERECustomerName=张三;
#捕获异常,执行异常处理程序,然后继续执行后续的SQL语句
UPDATEbankSETCurrentMoney=CurrentMoney+200WHERECustomerName=李四;
IFt_error=1THEN
ROLLBACK;
ELSE
COMMIT;
ENDIF;
END;;任务实施;任务总结;使用游标;任务提出;任务分析;1.理解游标;(2)游标的优点;(3)游标缺点;2.使用游标;任务实施;任务实施;任务总结;使用触发器;任务提出;任务分析;1.理解触发器;(1)创建触发器;注意事项;(2)管理触发器;(3)NEW和OLD的使用;2.使用触发器;【例1】当商品入库后,该商品的库存数量需自动增加,创建触发器实现,触发器名为add_Storage。
createtriggeradd_StorageafterinsertonStorageInfoforeachrow
begin
UPDATEProductInfo
SETStockNum=StockNum+new.StorageNum WHEREProductNo=new.ProductNo;
end;
;【例2】若修改某次销售信息,销售记录修改后,商品表中该商品的库存数量要自动能修改。创建触发器实现,触发器名为update_sales。
CREATETRIGGERupdate_salesAFTERUPDATEONSalesInfoFOREACHROW
begin
UPDATEProductInfo
SETStockNum=StockNum+old.SalesNum
WHEREProductNo=old.ProductNo;
UPDATEProductInfo
SETStockNum=StockNum-new.SalesNum
WHEREProductNo=new.ProductNo;
end;【练习1】在gxc数据库中,若修改某次入库信息,要修改的数据可能是入库商品编号或入库数量。入库记录修改后,商品表中对应商品的库存数量能自动能修改。通过创建触发器实现,触发器名为update_Storage。
【练习2】在gxc数据库中,若删除某条入库记录,入库记录删除后,商品表中该商品的库存数量能自动能修改。通过创建触发器来实现,触发器名为del_Storage。
【练习3】分组完成“图书借阅管理系统”数据库中的触发器的设计和编写。
1)图书借阅管理系统数据库表结构分组自己设计,但必须有图书是否在馆内的信息、图书借出及归还信息。
2)必须实现:随着图书借出或归还信息的添加,该图书的在馆状态能自动更新。其余功能由各小组自己设计扩展。;任务总结