一个事务读取了另一个事务未提交的数据
一个事务对同一数据的读取结果前后不一致。两次读取中间被其他事务修改了
幻读是指事务读取某个范围的数据时,因为其他事务的操作导致前后两次读取的结果不一致。幻读和不可重复读的区别在于,不可重复读是针对确定的某一行数据而言,而幻读是针对不确定的多行数据。因而幻读通常出现在带有查询条件的范围查询中
可能产生脏读、不可重复读、幻读
避免了脏读,可能产生不可重复读、幻读
避免了脏读,不可重复读。通过区间锁技术避免了幻读
串行化可以避免所有可能出现的并发异常,但是会极大的降低系统的并发处理能力
undo日志用于存放数据修改被修改前的值
UNDO LOG中分为两种类型,一种是 INSERT_UNDO(INSERT操作),记录插入的唯一键值;
一种是 UPDATE_UNDO(包含UPDATE及DELETE操作),记录修改的唯一键值以及old column记录。
mysql会将一个事务中的所有sq先l记录到redo log中,然后再将记录从redo log同步到数据文件中
它可以带来这些好处:
用于数据库主从复制的记录,是二进制格式。在事务提交之后进行一个磁盘写入。
这里注意下redo log 跟binary log 的区别,redo log 是存储引擎层产生的,而binary log是数据库层产生的。假设一个大事务,对tba做10万行的记录插入,在这个过程中,一直不断的往redo log顺序记录,而binary log不会记录,直到这个事务提交,才会一次写入到binary log文件中
1、默认情况下,开启事务自动提交功能。每执行一个sql,都会对应一个事务的提交
2、spring会将底层连接的自动提交特性设置为false。使用手动提交
事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败。
事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。一致性状态是指:1.系统的状态满足数据的完整性约束(主码,参照完整性,check约束等) 2.系统的状态反应数据库本应描述的现实世界的真实状态,比如转账前后两个账户的金额总和应该保持不变。
并发执行的事务不会相互影响,其对数据库的影响和它们串行执行时一样。比如多个用户同时往一个账户转账,最后账户的结果应该和他们按先后次序转账的结果一样。
事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。
提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。
备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记,以及学习视频都是可以点击这里免费领取的!
我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。
今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!
312)]
[外链图片转存中…(img-gRVURauo-1625131430314)]
[外链图片转存中…(img-Ow1xl1HX-1625131430316)]