mysql中事务是做什么 ,事务的特性又有那些

什么是事务?

  1. 在mysql中只有使用了innodb,才能使用事务。
  2. 事务是用来管理 inster update delete等操作的,保证成批的sql语句,要么全部执行,要么全部不执行。主要是保证数据的完整性的操作。

事务的特性

  • A 原子性
    一个事务中所有的操作,要么全部成功,要不全部不成功,不会结束在中间某一个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务发生前的状态
  • C 一致性
    事务发生前和发生后,数据的完整性没有被破坏。
  • I 隔离性
    数据库允许多个事务同时进行数据库进行读写和修改的能力,隔离性可以保证多个事务并发操作互不影响。所以隔离级别,读未提交,读已提交,可重复读,串行化
  • D 持久性
    事务处理结束后,对数据的处理就是永久的。

事务的隔离级别

怎么查询当期事务隔离级别

show VARIABLES like “TRANSACTION%”;
设置隔离级别 set transacation level xxx (隔离级别)
设置当期会话的隔离级别 : set sesscion transacation level xxx
设置全局的隔离级别 set global transacation level xxx (隔离级别

  • 读未提交 (Read uncommitted)
    ru级别 可能会读到其他事务未提交的数据 脏读 隔离级别最低的,很少使用
  • 读已提交(read committed)
    rc 级别 读的数据是提交的状态 可能会发生不可重复读,两次读取的数据不一致。
    防止脏读(因为是读取的是已经提交的数据)
  • 可重复读(repeatable read)
    rr 级别 默认的隔离级别,每次的读取的数据结果都是一样的,可能会发生幻读
    防止脏读和不能重复读
  • 串行化 (Serializable)
    最严格的事务类型 防止 脏读 幻读 不可重复读

出现的问题,解决方案

主要是不可重复读 和幻读
不可重复读 :
是指的同样的条件,前后读取的数据不一样;主要是因为交叉事务修改了数据
解决:使用可重复读的隔离级别
幻读:

  1. 事务在插入已经检查过不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测获取到的数据如同鬼影一般
  2. 同样的条件,第一次读取记录数和第二次读取的记录数不一样,因为是中途有插入数据
    解决:
    使用串行化隔离级
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值