事务

事务就是把系统状态从一种一致性点转换到另一个一致性点。事务主要包含acid四个特性:

  1. a(原子性)
    在一个事务中,要么修改全部成功,要么全部不成功;由undolog保证
  2. c(一致性)
    系统状态从一种一致性转换到另一种一致性,例如银行转账,转帐前a账户1000元b账户1000元,a转给b500元,结果必须是a:500 b:1500,即转帐前后两个账户总额不变
  3. i (隔离性)
    对于不同事务之间数据可见性的隔离,mysql有四个级别:read uncommited(读未提交)、read committed(读已提交)、repeatable read(可重复读)、serilizable(串行化)
    lock或者mvcc(多版本)保证
  4. d(持久性)
    一旦事务提交,数据就已经保存在磁盘中,只要磁盘不损坏无论mysql或者服务器发生什么情况都能恢复;由redolog保证

事务操作语句

begin|start transaction 开启一个事务,在存储过程中只能用start transaction,因为begin会被识别为begin...end...
commit  提交事务
rollback 会滚整个事务
savePoint name 创建一个保存点
rollback to name 回滚到给定名称的保存点
set transaction 设置隔离级别,分为当前会话或者全局,全局只对修改后创建的会话生效已存在的会话不会发生改变
   set [ global | session ] transaction isolation level Read uncommitted | Read committed | Repeatable | Serializable;

隔离级别

隔离级别越高越能数据隔离性越好,但是效率会降低,并且不同隔离级别会出现不同的问题,如下表所示:

隔离级别 异常情况 异常情况 异常情况
读未提交 脏读 不可重复读 幻读
读已提交 不可重复读 幻读
可重复读 幻读
序列化

脏读:读取到另一个事务还未提交的数据
不可重复读:在同一个事务中同一条数据结果不一致(数据被其他事务修改)
幻读:一个事务中可以修改另一个事务已提交的新增数据但是不能查询到,在rr级别可以通过加锁避免幻读

posted @ 2021-02-23 18:52  犬犬呀  阅读(14)  评论(0)    收藏  举报