mysql事务
事务的定义
一个最小的不可再分的工作单元,这个单元的操作要么全部成功,要么全部失败。
事务的acid特性
- 原子性:一个事务是不可分割的工作单位,事务包括的操作要么都做,要么都不做。
- 一致性:在事务开始之前和结束以后,数据库的完整性没有被破坏。
- 隔离性:一个事务的执行不能被其他事务干扰。
- 持久性:事务一旦提交,他对数据库中数据的修改是永久性的。
事务的隔离级别
- 未提交读,即可以读到没有被提交的数据,很明显这个级别的机制有可能出现脏读、重复读、幻读的情况
- 已提交读,即能够读到那些已经提交的数据,可以防止脏读,但是解决不了不可重复读和幻读
- 可重复读,即读取了一条数据,这个事务不结束,别的事务就不可以修改这条记录,解决了脏读、不可重复读的问题
- 可串行化,多个事务时,只有运行完一个事务之后,才能运行下一个事务
事务的类型
- 扁平事务,是事务类型中最简单的一种,也是使用最频繁的事务,在扁平事务中所有操作都是处于同一层次,由BEGIN WORK开始,由COMMIT WORK或ROLLBACK WORK结束,其间的操作是源自的,要么都执行,要么都回滚,因此扁平事务是应用程序称为原子操作的的基本组成模块。
- 带保存点的扁平事务,除了支持扁平事务支持的操作外,允许在事务执行过程中回滚同一事务中较早的一个状态。这是因为某些事务可能在执行过程中出现的错误并不会导致所有的操作都无效,放弃整个事务不合乎要求,开销太大,保存点用来通知事务系统应该记住事务当前的状态,以便当之后发生错误时,事务能回到保存点当时的状态。
- 链事务,可视为保存点模式的一种变种,带有保存点的扁平事务,当发生系统崩溃是,所有的的保存点都将消失,因为其保存点是易失的,这意味着当进行恢复时,事务需要从开始处重新执行,而不能从最近的一个保存点继续执行
- 嵌套事务,是一个层次结构框架,由一个顶层事务(top-level transaction)控制着各个层次的事务,顶层事务之下嵌套的事务被称为子事务,其控制每一个局部的变换。
- 分布事务,通常是一个分布式环境下运行的扁平事务,因此需要根据数据所在位置访问网络中的不同节点。
实现事务的两种方法
1.用begin、rollback、commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2.直接用set 来改变 mysql的自动提交模式
set autocommit = 0 禁止自动提交
set autocommit = 1 开启自动提交