文档详情

数据库技术项目式教程(MySQL)课件 项目9 事务、游标和触发器.pptx

发布:2025-04-30约1.56千字共33页下载文档
文本预览下载声明

使用事务;任务提出;银行转账:假定资金从张三账户转到李四账户,至少需要两步:

张三账户的资金减少;

然后李四账户的资金相应增加。

;任务分析;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)必须实现:随着图书借出或归还信息的添加,该图书的在馆状态能自动更新。其余功能由各小组自己设计扩展。;任务总结

显示全部
相似文档