请选择 进入手机版 | 继续访问电脑版

面试必问之MySQL中的事务

[复制链接]
苍野狼步 发表于 2021-1-1 18:31:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
什么是事务
  一组逻辑操纵单元,使数据从一种状态变更到另一种状态。
MySQL事务的四大特性(ACID)
  1、原子性(Atomicity):事务开始后所有操纵,要么全部做完,要么全部不做,不大概停滞在中间环节。事务执行过程中堕落,会回滚到事务的开始前的状态,所有的操纵就像没有发生一样,也就是说事务是一个不可分割的整体。
  2、一致性(Consistency):事务开始前和竣事后,数据库的完整性约束没有被粉碎、比如A向B转账,不大概A扣了钱,B却充公到。
  3、隔离性(Isolation):一个事务的执行不能被其他事务干扰,即一个事务内部的操纵及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。比如A正在从一张银行卡中取钱,在A取钱的过程竣事前,B不能向这张卡转账。
  4、长期性(Durability):事务完成后,事务对数据库的所有更新将被生存到数据库,不能回滚。
MySQL事务的三大并发问题
  1、脏读:事务A读取了事务B更新的数据,然后B回滚操纵,那么A读取到的数据是脏数据。
  2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,效果不一致。
  3、幻读:系统管理员A将数据库中所有学生的成绩从详细分数改为ABCDE品级,但是系统管理员B就在这个时候插入了一条详细分数的记载,当系统管理员A改竣事后发现另有一条记载没有改过来,就似乎发生了幻觉一样,这就叫幻读。
  小结:不可重复读的和幻读很容易肴杂,不可重复读侧重于修改,幻读侧重于新增或删除。管理不可重复读的问题只需锁住满意条件的行,管理幻读需要锁表。
MySQL事务的四大隔离级别
  
事务隔离级别表明脏读不可重复读幻读
读未提交(read-uncommitted)允许事务读取未被其他事务提交的变动
不可重复读(read-committed)只允许事务读取已经被其它事务提交的变动,可以避免脏读,但不可重复读和幻读问题仍然大概出现。
可重复读(repeatable-read)确保事务可以多次从一个字段中读取相同的值,在这个事务一连期间,克制其他事务对这个字段举行更新,可以避免脏读和不可重复读,但幻读的问题仍然存在。
串行化(serializable)确保事务可以从一个表中读取相同的行,在这个事务一连问题间,克制其他事务对该表执行插入、更新和删除操纵,所有并发问题都可以避免,但性能十分低下。
Mysql默认隔离级别:可重复读       Oracle默认的隔离级别:读已提交
MySQL事务的七大传播行为
  传播行为分为两种:分为支持事物的传播和不支持事物的传播
  
序号传播行为是否支持事务表明
1PROPAGATION_REQUIRED支持如果当前没有事务,就创建一个新事务,如果当前存在事务,就到场该事务,该设置是最常用的设置。
2PROPAGATION_SUPPORTS支持支持当前事务,如果当前存在事务,就到场该事务,如果当前不存在事务,就以非事务执行。
3PROPAGATION_MANDATORY支持支持当前事务,如果当前存在事务,就到场该事务,如果当前不存在事务,就抛出异常。
4PROPAGATION_REQUIRES_NEW支持无论当前存不存在事务,都创建新事务。
5PROPAGATION_NOT_SUPPORTED不支持事物以非事务方式执行操纵,如果当前存在事务,就把当前事务挂起。
6PROPAGATION_NEVER不支持事物以非事务方式执行,如果当前存在事务,则抛出异常。
7PROPAGATION_NESTED不支持事物如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操纵。
肴杂点:spring的事务是什么?与数据库的事务是否一样?
  本质上实在是同一个概念,Spring的事务是对数据库的事务的封装,最后本质的实现照旧在数据库,如果数据库不支持事务的话,Spring的事务是没有作用的。数据库的事务说简单就只有开启,回滚和关闭,Spring对数据库事务的包装,原理就是拿一个数据毗连,根据Spring的事务设置,操纵这个数据毗连对数据库举行事务开启,回滚或关闭操纵。
 

来源:https://blog.csdn.net/weixin_38007185/article/details/108589468
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )