Mysql的事务

Mysql的事务
一,Mysql事务的四大原则(ACID)
  • 原子性 (A):事务是最小单位,不可再分
  • 一致性 (C ) :事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
  • 隔离性 (I):事务A和事务B之间具有隔离性
  • 持久性 (D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
二,事务级别
  • 读未提交:read uncommitted
  • 读已提交:read committed
  • 可重复读:repeatable read
  • 串行化:serializable
三,不同事务级别并发可能会导致的问题
隔离级别脏读不可重复读幻读
读未提交:read uncommitted
读已提交:read committed×
可重复读:repeatable read××
串行化:serializable×××
  • 读未提交:read uncommitted:
    • 一个事务可以读取另一个事务未提交的数据。会导致脏读,不可重复读。
    • 举个例子:事务A执行插入。事务B执行查询。先执行事务A,完成了插入操作,但未提交,这时事务B执行了查询并返回结果,但是这时候事务A由于某些原因导致回滚提交,那么之前事务B返回的数据就是脏数据(数据库没有的但是读出来了),这就是脏读。
  • 读已提交:read committed:
    • 这个Oracle默认的事务级别。
    • 同一个事务的多次读取返回的结果不一致。会导致不可重复读,幻读。
    • 举个例子:事务A执行多次查询。事务B执行插入操作。事务A执行了两次查询返回的结果是null,事务A还未结束,这时候事务B执行了插入操作并提交了,这时事务A继续执行查询,发现前一次读取的数据与后面读取的数据不一致,这就是不可重复读问题。
  • 可重复读:repeatable read:
    • 这个事务级别是MySQL默认事务级别。会导致幻读。
    • 举个例子:有一个事务执 判断一个用户是否存在如果不存在就进注册。这个事务是并发执行的,它们同时判断到用户都不存在,所以都插入了用户,那么最终结果是用插入了多个用户,这个就是幻读问题。
  • 串行化:serializable:
    • 这个隔离级别能解决 脏读,不可重复读,幻度问题,所有事务都排队执行,在并发的情况下,执行效率极低
    • 如果数据库在不同机器上,那么这个单体事务也就会不生效,这时候就需要用到分布式事务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值