事务是什么? 事务是一系列T-SQL语句构成的逻辑工作单元,为完成一定的业务逻辑而存在,将一系列操作封装起来当作一个操作
事务应用 对多个表进行操作 在处理事务的过程中,如果出现某种错误或系统死机、断电,数据并不会保存到数据库
事务处理结果 事务处理的结果有两种:
- 并未发生任何错误,全部事务被提交
- 如果有某一个操作发生了错误或故障,所有的操作都会被全部回滚到最初的状态
事务的作用:通过事务提高数据的安全性,增强数据的处理效率,维护数据库的完整性
事务的特性:ACID
- 原子性:Atomic,事务是一个工作单元,一个整体提交或回滚,事务中的各个元素是不可分的,是一个操作
- 一致性:ConDemoltent,数据必须保持一致,数据状态一致
- 隔离性:Isolated,多个事务之间是彼此隔离的,体现了独立性
- 持久性:Durability,事务提交之后,对数据库的更改是永久的,真实的修改了数据库
--开启事务
begin try
begin tran
--set implicit_transactions on --开启一个隐式事务
--T-SQL insert update delete
insert into UserInfos(UserName,UserPwd,Age,DeptId)
values('lqq','111',23,2)
update UserInfos set Age=26 where UserId=31
delete from UserInfos where UserId=32
commit tran --提交事件
end try
begin catch
rollback tran --事务回滚
print "出现异常"
end catch
--set implicit_transactions off --关闭隐式事务
如何调用事务?一般放在存储过程中调用
事务并发问题 如何发生?多个用户对同一条数据同时做操作的时候,会产生并发问题 主要有以下几种:
丢失或覆盖更新:事务a和b同时对Age进行修改,a先提交,b后提交,最终的数据被b覆盖,对于
a事务而言,a所提交的数据丢失了
- 脏读:一个事务读取另一个事务并未提交的更新
- 不可重复读:多个事务访问同一条数据,每次读取的数据不同
- 幻象读:第一次读取的数据与第二次读取的不一致,第二次读取到的数据在第一次读取时不存在
设置事务隔离级别 隔离级别低,会造成很多并发问题 隔离级别高,降低并发问题 隔离级别: 1 read committed 默认级别,可以避免脏读,会出现不可重复读和幻像读并发问题 2 read uncommitted 0级 ,4种并发问题都存在 3 repeatable read 可以避免脏读和不可重复读,会出现幻想读并发问题 4 serializable 四种并发问题都可避免
--开启事务
begin try
set tran isolation level read commited --设置隔离级别
begin tran
--set implicit_transactions on --开启一个隐式事务
--T-SQL insert update delete
insert into UserInfos(UserName,UserPwd,Age,DeptId)
values('lqq','111',23,2)
update UserInfos set Age=26 where UserId=31
delete from UserInfos where UserId=32
commit tran --提交事件
end try
begin catch
rollback tran --事务回滚
print "出现异常"
end catch
--set implicit_transactions off --关闭隐式事务
如何调用事务?一般放在存储过程中调用