Mysql略知一二

Posted by 甘家城 on 2000-09-27 Viewed times

前言

本文主要为 mysql 相关知识

脏读,不可重复读,幻读

  • 脏读:某个事务更新数据没有提交,另一个事务已经读取了数据
  • 不可重复读:一个事务两次查询数据不一致,因为两次查询中间另一个事务更新了数据
  • 幻读:一个事务两次查询数据总量不一致,因为两次中间另一个事务插入了数据

隔离级别

隔离级别 脏读 不可重复读 幻读
读未提交(Read Uncommitted)
读已提交(Read Committed) ×
可重复读(Repeatable Read) × ×
序列化(Serializable) × × ×

Innodb 锁模式

  • 共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的写锁
  • 排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和写锁。

Innodb 加锁模式

  • 意向锁是 innodb 自动加的
  • update,insert,delete,innodb 会加上排他锁
  • 普通 select 不会加锁,用到了索引的查询在索引上加行锁,否则加表锁,加锁语句如下
    • 共享锁:LOCK IN SHARE MODE
    • 排他锁:FOR UPDATE

索引 B+ 树特点

  • 有 n 个子树的非叶子节点包括 n 个关键字,不存数据只用作索引,所有数据都存在叶子节点。
  • 所有叶子节点包含所有关键字信息,且叶子节点关键字自小而大连接。
  • 通常在 b+树上有两个头指针,一个指向根节点,一个指向关键字最小的叶子节点。
  • 同一个数据会在不同节点重复出现,根节点最大元素就是 b+树最大元素。

B+树和 B 树区别

  • B 树每个节点都存储数据,B+树只有叶子节点存储数据,所有的叶子结点使用链表相连
  • B 树具有 n 个关键字的节点包含(n+1)棵子树,B+树包含(n)棵子树。
  • B+ 树每次查找都是从根节点到叶子节点的路径

主键索引和一般索引的区别

主键索引叶子节点存放的是整行数据,非主键索引叶子节点存放的是主键的值,
非主键索引需要多查询一次 ID 索引树