事务

事务

特点:

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

分类:

  • 自动提交事务
  • 显式事务
  • 隐式事务
  • 分布式事务

管理:

  1. 显式事务的定义(启动事务);

显式事务需要明确定义事务的启动。显式事务的定义格式如下:

BEGIN {TRAN | TRANSACTION}
[{transaction_name | @tran_name_variable }
[WITH MARK[ ‘description’ ]] ]

eg: 定义一数据库teaching的course表中课程号为c05103的课程名为“高等数学”,并提交事务;

declare @TranName varchar(20);
select @TranName ='Add_Score';
begin tran @TranName;   --定义了一个名为Add_Score的事务
update course set cname ='高等数学'
where cno = 'c05103'
commit tran @TranName; --利用commit tran提交事务
go

  1. 隐式事务的定义(启动事务);

默认情况下的隐式事务是关闭的,使用隐式事务需要先将事务模式设置为隐式事务模式。注意不再使用隐式事务时,要退出该模式。

SET IMPLICIT_TRANSACTIONS {ON |OFF}

set implicit_transactions on; --打开隐式事务,注意在默认状态下隐式事务是‘关闭的’
set implicit_transactions off;--关闭隐式事务;
  1. 保存事务;

为了提高事务执行的效率,或者进行程序的调试等,可以在事务的某一点处设置一个标记(保存点),这样当使用回滚语句时,可以不用回滚到事务的起始位置,而是回滚到标记所在的位置即保存点。
保存点设置及使用格式。

SAVE {TRAN | TRANSACTION} {savepoint_name | @savepoint_variable}
ROLLBACK TRANSACTION {savepoint_name | @savepoint_variable}

eg: 定义一个事务,向course表中添加一条记录,并设置保存点。然后再删除该记录,并回滚到事务的保存点,提交事务。

begin tran --利用begin tran定义了一个事务,并向表中插入一条数据;
 insert into course
 values('c05139','统一建模语言uml','选修',48,3.0);
 save tran savepoint; --设置保存点savepoint
 delete from course  --删除该记录
 where cno = 'c05139';
 rollback tran savepoint; --回滚到事务的保存点savepoint处
 commit tran; --利用commit tran提交事务
 go
  1. 提交事务;

提交事务标志着一个执行成功的隐式事务或显式事务的结束。
事务提交后,自事务开始以来所执行的所有数据修改被持久化,事务占用的资源被释放。

COMMIT {TRAN | TRANSACTION}
[transaction_name | @tran_name_variable]

eg: 定义事务更新course表中课程号为c05109的课程名称为“数理统计”,然后回滚该事务。

  1. 回滚事务;

回滚事务是指清除自事务的起点或到某个保存点所做的所有数据修改。释放由事务控制的资源。

ROLLBACK {TRAN | TRANSACTION}
[transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ]

注:在提交事务后是不能回滚的

  1. 自动提交事务;

  2. 事务嵌套;

你可能感兴趣的:(SQL数据库+,sql,server2019)