事务是什么? 事务是一系列T-SQL语句构成的逻辑工作单元,为完成一定的业务逻辑而存在,将一系列操作封装起来当作一个操作

    事务应用 对多个表进行操作 在处理事务的过程中,如果出现某种错误或系统死机、断电,数据并不会保存到数据库

    事务处理结果 事务处理的结果有两种:

    • 并未发生任何错误,全部事务被提交
    • 如果有某一个操作发生了错误或故障,所有的操作都会被全部回滚到最初的状态

    事务的作用:通过事务提高数据的安全性,增强数据的处理效率,维护数据库的完整性

    事务的特性:ACID

    • 原子性:Atomic,事务是一个工作单元,一个整体提交或回滚,事务中的各个元素是不可分的,是一个操作
    • 一致性:ConDemoltent,数据必须保持一致,数据状态一致
    • 隔离性:Isolated,多个事务之间是彼此隔离的,体现了独立性
    • 持久性:Durability,事务提交之后,对数据库的更改是永久的,真实的修改了数据库
    1. --开启事务
    2. begin try
    3. begin tran
    4. --set implicit_transactions on --开启一个隐式事务
    5. --T-SQL insert update delete
    6. insert into UserInfos(UserName,UserPwd,Age,DeptId)
    7. values('lqq','111',23,2)
    8. update UserInfos set Age=26 where UserId=31
    9. delete from UserInfos where UserId=32
    10. commit tran --提交事件
    11. end try
    12. begin catch
    13. rollback tran --事务回滚
    14. print "出现异常"
    15. end catch
    16. --set implicit_transactions off --关闭隐式事务
    17. 如何调用事务?一般放在存储过程中调用

    事务并发问题 如何发生?多个用户对同一条数据同时做操作的时候,会产生并发问题 主要有以下几种:

    • 丢失或覆盖更新:事务a和b同时对Age进行修改,a先提交,b后提交,最终的数据被b覆盖,对于

      a事务而言,a所提交的数据丢失了

    • 脏读:一个事务读取另一个事务并未提交的更新
    • 不可重复读:多个事务访问同一条数据,每次读取的数据不同
    • 幻象读:第一次读取的数据与第二次读取的不一致,第二次读取到的数据在第一次读取时不存在

    设置事务隔离级别 隔离级别低,会造成很多并发问题 隔离级别高,降低并发问题 隔离级别: 1 read committed 默认级别,可以避免脏读,会出现不可重复读和幻像读并发问题 2 read uncommitted 0级 ,4种并发问题都存在 3 repeatable read 可以避免脏读和不可重复读,会出现幻想读并发问题 4 serializable 四种并发问题都可避免

    1. --开启事务
    2. begin try
    3. set tran isolation level read commited --设置隔离级别
    4. begin tran
    5. --set implicit_transactions on --开启一个隐式事务
    6. --T-SQL insert update delete
    7. insert into UserInfos(UserName,UserPwd,Age,DeptId)
    8. values('lqq','111',23,2)
    9. update UserInfos set Age=26 where UserId=31
    10. delete from UserInfos where UserId=32
    11. commit tran --提交事件
    12. end try
    13. begin catch
    14. rollback tran --事务回滚
    15. print "出现异常"
    16. end catch
    17. --set implicit_transactions off --关闭隐式事务
    18. 如何调用事务?一般放在存储过程中调用