概述
1、什么是事务
对于一个事务,要么事务内的sql全部执行,要么都不执行
2、 事务的特性ACID
-
原子性
整个事务中所有的操作要么全部提交成功,要么全部失败会滚。
-
一致性
数据库总是从一个一致性状态转换到另一个一致性状态。假如有三个sql语句,如果在更新第二个sql语句时,准备执行第三个sql语句突然崩溃,事务最终没提交,事务做的修改不会保存到数据库
-
隔离性
一个事务所做的修改在最终提交以前,对其他事务是不可见的
- 持久性
一旦事务提交,所做的修改永久保存到数据库
3、并发事务带来的问题
- 脏读
当一个事务正在访问数据并且对数据进行修改,但还没有提交到数据库中,另一个事务访问了这个数据并且使用,但是这个数据还没有提交,则这个数据就是脏数据,后续操作都是不正确的
- 丢失修改
一个事务读取一个数据时,另一个事务也在访问这个数据,则第一个事务修改了这个数据后,第二个时候也修改了这个数据,则第一个事务修改的结果就会丢失,就是丢失修改
- 不可重复读
一个事务多次读同一个数据,这个事务还没结束,另一个事务也在访问该数据,那么在一个事务的两次读数据之间,由于第二个时候的修改导致了第一个事务两次读取的数据不一样,
- 幻读
和不可重复读类似。他发生在一个事务读取了几行数据,另一个事务并发事务插入了一些数据,在随后的查询,第一个事务就会发现多了一些原本不存在的记录,就好像发生了幻觉。
4、隔离性与隔离级别
-
读未提交 ru
一个事务还没提交,它做的事情能被其他事物看到
-
读提交 rc
一个事务提交之后,它做的变更才能被其他事物看到
- 可重复读 rr (MySQL InnoDB引擎的默认隔离级别)
同一个事务多次读取到同样的数据的结果是一致的,InnoDB使用MVCC多并发版本控制解决幻读(并不是完全解决)
-
串行化 Serializable
最高的隔离级别,强制事务串行执行,避免幻读,实际是在读取的每一行数据上加锁,会有严重的锁竞争问题,对性能会有一定的影响
5、事务是如何实现的(原理)?
事务日志记录着事务的实现
redo log实现原子和持久性
undo log实现一致性
事务日志是如何实现事务的ACID,请看下一篇什么是事务日志
最后
以上就是优秀电灯胆为你收集整理的23春招-mysql事务相关高频面试题的全部内容,希望文章能够帮你解决23春招-mysql事务相关高频面试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复