架构爱好者
学习交流中心

MySQL听课笔记

事物的特点是ACID:

  • 原子性。
  • 一致性:一致性是我们的根本追求,一致性的实现是由其他三个特点来保证的。
  • 隔离性:通过锁的机制来实现,但是加锁之后效率变低了。MVCC(Multi-Version Concurrency Control)多版本并发控制。
  • 持久性:redolog。

日志系统:

  • binlog:二进制日志,数据同步以及恢复,存于server,binlog可用于主从复制和数据恢复。
  • undolog:回滚日志,存于innodb等,在磁盘里,断电不会丢失数据。
  • redolog:前滚日志,存于innodb等,在磁盘里,断电不会丢失数据,它不会整理数据,有一个固定空间来循环写数据(新数据进来后如果超过空间大小了,旧数据会被踢出)。
  • errorlog:错误日志。
  • slowlog:慢日志。
  • relaylog:中继日志。

binlog和redolog都会同时记录数据,它们记录的顺序不是先哪个后哪个。这里有个“二阶段提交”的概念。如果先写redolog再写binlog,或者反过来,都有问题——当一个写好另一个还没写好的时候如果断电情况。

IO操作:

  • 随机IO。
  • 顺序IO。

数据库里的并发分几种情况:

  1. 读读:不存在任何问题,也不需要并发控制。
  2. 读写:有数据安全问题,脏读、幻读,不可重复读。
  3. 写写:有数据安全问题,可能存在更新丢失问题。

当前读:数据读取的时候读取的都是最新的版本数据。select lock in share mode, select for update, update, delete, insert这些操作基本都是触发当前读。

快照读:读取历史版本的数据。select有可能触发快照读(set autocommit=0;)。

隐藏字段:

  • DB_TRX_ID:创建这条记录或者最后一次修改该记录的事物id。
  • DB_ROLL_PRT:回滚指针,指向数据的上一个版本。
  • DB_ROW_ID:隐藏主键,如果没有显示主键的话,就会多一个隐藏主键。

MySQL默认的隔离级别是REPEATABLE-READ(通过select @@transaction_isolation;可查);

MVCC(Multi-Version Concurrency Control)多版本并发控制。

CAS:compare and swap。

未经允许不得转载:技术杂烩 » MySQL听课笔记