客户端
连接线程处理
查询缓存
解析器
优化器
存储引擎
1.原子(事务内所有 sql 为一个原子),一致(事务内所有 sql 一起提交),隔离,持久(永久保留在数据库中)
1.未提交读( READ UNCOMMITTED ),事务可以读取未提交的数据,也叫脏读。
2.提交读( READ COMMITED ),一个事务从开始到提交所做的任务修改对其他事务都是不可见的,也叫不可重复读。
3.可重复读( REPEATABLE READ ),解决脏读的问题,保证同一个事务多次读取同样的记录结果是一致的,但随之会产生幻读(当一个事务读取某范围值时,另一个事务插入了新的记录,之前的事务再次读取改范围的记录,产生的幻行)的问题,InnoDB 和 XtraDB 存储引擎通过多版本并发控制解决幻读问题( MVCC ),可重复读时 musql 默认的事务隔离级别。
4.可串行化( SERIALIZABLE ),最高隔离级别,强制事务串行执行,避免了幻读,给每一行枷锁,导致大量的超时和锁争用的问题。
1.两个事务里的 sql 的锁被对方锁定,陷入的死循环。
2.InnoDB 目前处理死锁的方法是,将只有最少行级的排他锁(写锁)的事务进行回滚。?
1.又称预写式日志,事务日志持久化之后,内存中被修改的数据在后台慢慢刷回到磁盘,修改数据要写两次磁盘。?
1.MVCC 通过保存数据的某个时间点快照来实现
2.通过两个隐藏列,一个列是保存行的创建时间,一个是行的过期时间(或删除时间)
3.MVCC 只在 REPEATABLE READ 和 READ COMMITTED 两个隔离级别下工作
1.数据库可称 schema 保存在数据目录下的一个子目录,创建表时,mysql 会在数据库子目录下的创建一个和表同名的.frm 文件来保存表的定义
1.可选值 Dynamic,Fixed 或者 Compressed,Dynamic 的行长度是可变的如 varchar 和 blob ,Fixed 的行长度是固定的,如 char 和 interger
1
freelancher 2021-10-30 15:18:05 +08:00
?发的是啥。有好几个错误的理解。。。。还好学过。不然都带偏了。。。
|
2
statumer 2021-10-31 16:27:03 +08:00
隔离级别这块儿可以再多研究研究
|
3
MaoRong OP |
4
xiaotianhu 2021-11-01 10:10:27 +08:00
这是把 v2 当 CSDN 来用了?
|
5
fkdtz 2021-11-01 10:33:50 +08:00
建议打回重看
|
6
freelancher 2021-11-01 14:45:09 +08:00
但凡有认真读完资料也不会理解成这样吧。基础功还是要练一下。O 了。不多说了。
|