一、事务概述

1.什么是事务

一件事情有n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败

就是将n个组成单元放到一个事务中

2.mysql的事务

默认的事务:一条sql语句就是一个事务 默认就开启事务并提交事务

手动事务:

1)显示的开启一个事务:start transaction

2)事务提交:commit代表从开启事务到事务提交 中间的所有的sql都认为有效 真正的更新数据库

3)事务的回滚:rollback 代表事务的回滚 从开启事务到事务回滚 中间的所有的 sql操作都认为无效数据库没有被更新

什么是事务丢失更新:

丢失更新:多个事务并发访问的过程中:一个事务刚修改了某个记录中一个字段的值(name).没有提交的时候,另外的一个事务修改了这个记录的另一个字段的值(money).没有提交.刚开始的事务提交.将账户的名称修改了.当另一个事务在提交或者回滚的时候都会将之前事务修改的字段的值覆盖掉 .

sql server事务控制的语句 sql事务作用_sql事务


service层写事务的原因:

sql server事务控制的语句 sql事务作用_sql server事务控制的语句_02

什么是乐观锁:

  • 乐观锁:假设丢失更新不一定存在.使用是时间戳或者版本号解决方案.

    悲观锁:
  • 悲观锁:假设丢失更新是一定存在.使用了数据库中的一种锁机制.(排它锁)

    事务保存:
    Service的事务:
    介绍:事务要加在业务层.因为在DAO中不是开启事务的最好的地方.一个业务层中需要调用多个DAO中的方法的时候,那么每个DAO中的Connection都不是同一个对象.不是同一个对象的话,开启的事务就不会再同一个事务中.

    数据库中提供了事务的隔离级别用于解决三类读问题:
    * read uncommitted :未提交读.脏读、不可重复读、虚读都是有可能发生.
  • read committed :已提交读.避免脏读.但是不可重复读、虚读是有可能发生.
  • repeatable read :可重复读.避免脏读、不可重复读.但是虚读是有可能发生.
  • serializable :串行化的.避免脏读、不可重复读、虚读的发生.

安全性:serializable > repeatable read > read committed > read uncommitted

  • 效率性:read uncommitted > read committed > repeatable read > serializable