栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mysql的事务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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:
    • 这个隔离级别能解决 脏读,不可重复读,幻度问题,所有事务都排队执行,在并发的情况下,执行效率极低
    • 如果数据库在不同机器上,那么这个单体事务也就会不生效,这时候就需要用到分布式事务
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号