在SQL Server 2008中使用事务

/*
    数据库实验八
    2017/05/25

具体操作内容:
建立银行数据库DBBank,创建一个银行账号信息表tbl_accounts (account_num,account_name,balance,memory),
分别表示账号、户名、余额和备注这四个属性列,插入相应的数据,运行事务,完成银行转账业务。可以用以下的脚本实现:

(1)使用显式事务,完成银行转账业务;
(2)使用隐式事务,完成银行转账业务;
(3)创建一个具有保存点的事务,验证保存点的作用;
(4)验证什么是自动提交事务;
(5)创建一个新的登录,打开两个SSMS,分别用不同的登录名连接到同一服务器上,打开同一个数据库,运行相关的事务处理,验证多个事务并发执行时的情况。

*/

--创建DBBank数据库
Create Database DBBank
Go

Use DBBank

--创建tbl_accounts表
Create Table tbl_accounts
(
    account_num varchar(10) primary key,
    account_name varchar(50),
    balance decimal(10,3),
    memory varchar(200)
)

--往tbl_accounts表中插入数据
Insert Into tbl_accounts Values('A','东方软件',60000,null)
Insert Into tbl_accounts Values('B','东方软件',30000,null)
Insert Into tbl_accounts Values('C','新天贸易',100000,null)

Select * from tbl_accounts

--(1)使用显式事务,完成银行转账业务;
--开始定义事务
Begin Transaction T_transfer 
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Update tbl_accounts set balance=balance-10000 where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='A' And account_name='东方软件'

Select * from tbl_accounts where account_num='B' And account_name='东方软件'
Update tbl_accounts set balance=balance+10000 where account_num='B' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'

--回滚上面的事务,事务的结束方式只能选择其中的一种,要么回滚,要么提交;
--Rollback Transaction T_transfer

--提交当前事务,(已经回滚的事务就不能再提交了!)
Commit Transaction T_transfer
--查看事务执行后的结果
select * from tbl_accounts where account_name='东方软件'


--(2)使用隐式事务,完成银行转账业务;
--设置隐式事务选项为on
Set Implicit_Transactions On
--事务不需要有显式的开始标志;
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Update tbl_accounts set balance=balance-10000 where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='A' And account_name='东方软件'

Select * from tbl_accounts where account_num='B' And account_name='东方软件'
Update tbl_accounts set balance=balance+10000 where account_num='B' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'

--回滚上面的事务,事务的结束方式只能选择其中的一种,要么回滚,要么提交;
--Rollback Transaction 
--提交当前事务,(已经回滚的事务就不能再提交了!)
Commit Transaction
--查看事务执行后的结果
select * from tbl_accounts where account_name='东方软件'


--(3)创建一个具有保存点的事务,验证保存点的作用;
--开始定义事务
Begin Transaction T_transfer
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Update tbl_accounts set balance=balance-10000 where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='A' And account_name='东方软件'

--设置保存点Save_transfer
Save Transaction Save_transfer

Select * from tbl_accounts where account_num='B' And account_name='东方软件'
Update tbl_accounts set balance=balance+10000 where account_num='B' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'

--回滚到保存点
Rollback Transaction Save_transfer
--查看回滚到保存点后的结果
select * from tbl_accounts where account_name='东方软件'

--回滚整个事务,事务的结束方式只能选择其中的一种,要么回滚,要么提交;
--Rollback Transaction T_transfer 
--提交当前事务,(已经回滚的事务就不能再提交了!)
Commit Transaction T_transfer
--查看事务执行后的结果
select * from tbl_accounts where account_name='东方软件'


--(4)验证什么是自动提交事务;
--第一个事务;单一的一个更新语句,系统自动作为一个事务进行处理;
Update tbl_accounts set balance=balance-10000 where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='A' And account_name='东方软件'

Select * from tbl_accounts where account_num='B' And account_name='东方软件'
--第二个事务;
Update tbl_accounts set balance=balance+10000 where account_num='B' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'

--查看事务执行后的结果
select * from tbl_accounts where account_name='东方软件'

--(5)
--创建用户
USE [DBBANK]
GO

CREATE  LOGIN  test  WITH  PASSWORD='1234';
CREATE  USER   test  FOR  LOGIN  test;
GRANT insert,delete,select ON tbl_accounts TO test;

--1.
Use DBBank
Select * from  tbl_accounts

--2.
Select * from  tbl_accounts

--3.
Select * from  tbl_accounts

--4.
Select * from  tbl_accounts

--5.
Begin Tran T_Del2
Delete from tbl_accounts where account_num='C'
Select * from  tbl_accounts

--6.
Rollback
Select * from  tbl_accounts

----------------------------------------------------------------
--7.
Use DBBank
Select * from tbl_accounts

--8.
Select * from  tbl_accounts

--9.
Select * from  tbl_accounts

--10.
Select * from  tbl_accounts  with(nolock)

--11.
Select * from tbl_accounts

--12.
Select * from  tbl_accounts

--13.
Select * from  tbl_accounts  with(nolock)

--14.
Select * from  tbl_accounts

--15.
Select * from  tbl_accounts

你可能感兴趣的:(数据库SQL)