目录
1.定义
定义
一个数据库操作序列
一个不可分割的工作单位(要么全做,要么全不做)
恢复和并发控制的基本单位事务和程序比较
在关系数据库中,一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序。
一个程序通常包含多个事务
2、事务的特性(ACID特性)
事务的ACID特性:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持续性(Durability )
3、SQL对事务的支持
ANSI(American National Standards Institute ,美国国家标准委员会)发布的SQL92标准已经明确了对事务的支持。各个DBMS除了都支持表示事务结束的COMMIT和ROLLBACK语句外,各个不同的DBMS在其它具体的事务实现中还是有一些差异。
在最常用的数据库系统SQL SERVER 2000中规定: 在事务中除以下语句不可使用外,其它所有SQL SERVER 2000支持的 SQL 语句均可使用:
因为上表中的命令语句一旦执行,数据库系统就立即自动做了提交,实际上我们可以认为数据库管理系统支持的所有的SQL语句均可以在事务中使用。
4.Sql中事务的定义
显式定义方式
BEGIN TRANSACTION BEGIN TRANSACTION SQL 语句1 SQL 语句1 SQL 语句2 SQL 语句2 。。。。。 。。。。。 COMMIT ROLLBACK
隐式方式
当用户没有显式地定义事务时,
DBMS按缺省规定自动划分事务
例.下面是创建一个带有参数的事务t11。功能是:首先,删除学生表中学号为'200102'的学生记录。
并且如果参数X=-1,回滚事务;否则,删除选修表中学号为'200102'的选修记录,并提交事务。
begin transaction t11 with mark 'aaa' declare @x int set @x=1 delete from student where sno='200102' if @x=-1 begin rollback transaction t11 end else begin delete from sc where sno='200102' commit transaction t11 end
执行过程:
exec fs; -- 触发器那篇博客定义的触发器 查询表studnet 运行结果: 2000101 李勇 男 20 00311 0 2000102 刘诗晨 女 19 00311 0 begin transaction t11 with mark 'aaa' declare @x int set @x=1 delete from student where sno='2000102' if @x=-1 begin rollback transaction t11 end else begin delete from Cj where sno='2000102' commit transaction t11 end exec fs; 运行结果: 2000101 李勇 男 20 00311 0 -- 成功删除'2000102' 因为@x=1没有rollback 反而commit begin transaction t11 with mark 'aaa' declare @x int set @x=-1 delete from student where sno='2000101' if @x=-1 begin rollback transaction t11 end else begin delete from Cj where sno='2000101' commit transaction t11 end --(1 行受影响) --但是 exec fs; 2000101 李勇 男 20 00311 0 -- 并未删除 rollback了
在应用程序中尽量使用数据库提交语句COMMIT,因为即使不出故障,也很难保证对数据库的每次改写都写到实际数据库中。一旦出现故障,程序对数据库的所有修改将全部被撤销。