MySQL流水账(一)

本文深入探讨MySQL的存储引擎,如InnoDB、MyISAM和MEMORY,重点关注InnoDB的事务处理,包括redo log和binlog。讲解了事务的隔离级别,如读未提交、读已提交、可重复读和串行化,以及它们的适用场景。同时,讨论了索引模型如哈希表、有序数组和B+树,并分析了主键索引和普通索引的查询区别。此外,还介绍了MySQL的锁机制,如全局锁、表级锁(表锁和MDL)和行级锁,以及如何处理死锁和优化锁冲突。
摘要由CSDN通过智能技术生成

1、MySQL常见的三种存储引擎:InnoDB、MyISAM、MEMORY

2、MySQL基本架构示意图

 3、MySQL 里面最重要的两个日志,即物理日志 redo log (重做日志)和逻辑日志 binlog(归档日志)。redo log 用于保证 crash-safe 能力。

innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数我建议你设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失。

sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数我也建议你设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。

4、redo log示意图;write pos是当前记录的位置,checkpoint是当前要擦除的位置

5、update语句执行流程;图中浅色框表示是在InnoDB内部执行的,深色框表示是在执行器中执行的

6、SQL 标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。下面我逐一为你解释:

读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。
读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。
可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

读未提交:别人改数据的事务尚未

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值