数据库 事务

版权声明:原创文章,转载请注明出处 https://blog.csdn.net/hza419763578/article/details/84034852

目录

1.定义

2、事务的特性(ACID特性)

3、SQL对事务的支持

4.Sql中事务的定义


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,因为即使不出故障,也很难保证对数据库的每次改写都写到实际数据库中。一旦出现故障,程序对数据库的所有修改将全部被撤销。

猜你喜欢

转载自blog.csdn.net/hza419763578/article/details/84034852
今日推荐