事务

 事务
概念
为什么引入事务?
一般情况下,同一时刻很少只有一个用户访问数据库。在同一时刻可能会有多个不同类型的用户访问数据库,这样就必然会发生一些冲突。例如,一个用户查看数据表中的数据,作一些基本的查询操作,另一个用户在第一个用户查询期间更新了表,那么就造成第一个用户第二次查询会看到不同的数据,造成第一次查询失败。因此SQL Server引入了事务来解决这类问题。
什么是事务?
事务是指一个不可分割的单元的工作,要么全做,要么全不做。一个事务由一个或多个完成一组相关行为的SQL语句组成,每个SLQ语句都用来完成特定的任务。相当于原语
事务必须具备四个属性:
 原子性:是指一个事务中要么操作都执行,要么都不执行。
 一致性:是指当事务完成时,所有的数据必须都具有一致的状态。
 独立性:是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另一个事务修改之前的状态,要么是修改之后的状态,本质上是一种串行性。
 持久性:是指当一个事务提交完成,则事务所完成的工作对数据库的影响是永久保存。
事务工作原理:
只有完成了事务才提交,否则数据要恢复到原始状态,只有完成事务提交,才能表示当前事务执行完毕。其实就是,事务在对数据库进行操作时,数据库中被事务操作的数据是被锁定的,只有当正在操作的事务提交后,才能再供其他事务操作。
使用事务的考虑:
原则上事务尽可能短、尽量避免事务嵌套。
事务控制语句
1  BEGIN  TRANSACTION [事务名]:开始一个事务
2 . COMMIT 提交:完成一个事务单元
3. ROLLBACK  [TRAN|TRANSACTION] [事务名|保存点名] 回滚:回滚一个事务单元,即抛弃自最近一条begin transaction语句之后的所有修改。
4. SAVE  [TRANSACTION] <savepointname> 保存位置:设置保存点,允许部分提交一个事务,同时仍能退回这个事务的其余部分。
例:定义一个简单的事务并设置保存点
begin transaction exampletrans   --开始一个事务
use educ
go
update student                  --第一次更新
set sex='女'
where sid='bj10001'
go
save transaction change    --设置保存点
update student                --第二次更新
set sname='李小丽'
where sid='bj10001'
go
rollback transaction change      --回滚到保存点
print 'program go on!'
commit transaction

/*该例有两个更新操作,第一次更新完成后设置一个保存点;第二次更新完成后,程序执行回滚
到保存点,使得第二次更新取消。但第一次更新有效;程序继续从回滚处执行,打印一行字*/
 
原来bj10001是男生,现在被改为女生
 
同学们再执行下面的脚本。看看结果,思考一下用法
begin transaction exampletrans   --开始一个事务
use educ
go
update student                  --第一次更新
set sex='男'
where sid='bj10001'
go
save transaction change    --设置保存点
update student                --第二次更新
set sname='刘伟箭'
where sid='bj10001'
go
--rollback transaction change      --回滚到保存点
print 'program go on!'
commit transaction
begin transaction exampletrans   --开始一个事务
use educ
go
update student                  --第一次更新
set sex='女'
where sid='bj10001'
go
save transaction change    --设置保存点
update student                --第二次更新
set sname='王小丽'
where sid='bj10001'
go
rollback transaction exampletrans      --回滚到保存点
print 'program go on!'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值