实验五:事务案例:完成转账的过程,如果转账1000会回滚,提示失败,如果转账800,提示成功。
要求:
(1)创建表名为bank,如图所示:
(2)Currentmoney列的Check约束:
(3)插入两条数据:
INSERT INTO bank(customerName,currentMoney) VALUES('张三',1000)
INSERT INTO bank(customerName,currentMoney) VALUES('李四',1)
(4)转账的过程代码:(先执行转账1000,查看结果;之后转账800,查看结果)
PRINT '查看转账事务前的余额'
SELECT * FROM bank
GO
/*--开始事务 (指定事务从此处开始,后续的T—SQL语句都是一个整体--*/
BEGIN TRANSACTION
/*--定义变量,用于累计事执行过程中的错误--*/
DECLARE @errorSum INT --声明变量,用于保存所有T—SQL语句错误号的和
SET @errorSum=0 --初始化为,即无错误
/*--转账:张三的账户少1000元,李四的账户多1000元--*/
UPDATE bank SET currentMoney=currentMoney-800
WHERE customerName='张三'
SET @errorSum=@errorSum+@@ERROR --累计是否有错误
UPDATE bank SET currentMoney=currentMoney+800
WHERE customerName='李四'
SET @errorSum=@errorSum+@@ERROR --累计是否有错误
PRINT '查看转账事务过程的余额'
SELECT * FROM bank
/*--根据是否有错误,确定事务是提交还是撤销--*/
IF @errorSum<>0 --如果有错误
BEGIN
PRINT '交易失败,回滚事务'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
PRINT '交易成功,提交事务,写入硬盘,永久地保存'
COMMIT TRANSACTION
END
GO
PRINT '查看转账事务后的余额'
SELECT * FROM bank
GO