读写锁

  • 读锁:是一种共享锁,一个事务持有读锁时,不会阻塞其它的读锁,其他事务都可以对该数据进行读取;
  • 写锁:是一种排他锁,一个锁持有写锁会阻塞其他的写锁和读锁,从而保证了一个只有一个事务进行写操作,并且防止其他事务读取正在写入资源,避免了脏读;

锁策略

锁策略:就是在锁的开销和数据安全性之间寻求平衡;

  • 表锁:表锁是MySQL中最基本的锁策略,并且是开销最小的策略。表锁会锁定整张表,一个事务在对表进行写操作(插入、删除、更新等)前,需要获取写锁,这样会阻塞其他用户对该表的所有读写操作。只有没有写锁时,其他读取的事务才能获得读锁,读锁之间是不阻塞的。另外,写锁比读锁有更高的优先级,因此一个写锁请求可能会被插入到读锁队列的前面,而反之则不可。
  • 行级锁:可以最大程度上的支持并发操作,同时也带来最大的锁开销。

范式

  1. 第一范式:数据库的每一列都是不可分割的原子数据,即不可拆分;
  2. 第二范式:建立在第一范式基础上,要求每一行的数据被唯一的区分出来,就是具有唯一标示;
  3. 第三范式:在第二范式的基础上,要求任何非主属性只依赖于主属性,而与其他属性之间不存在依赖关系。

多版本并发控制(MVCC)

  1. 特点:MVCC是行级锁的一种变种,但是它很多情况下避免了加锁操作,因此开销更低。虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的锁。
  2. 实现方式:通过在每行记录后面保存两个隐藏的列来实现。这两列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。存储的不是实际时间,而是系统版本号。
  3. 优点:通过保存两个额外的系统版本号,使得大部分读操作不需要加锁,性能很好,并且能够保证只读到符合标准的数据。
  4. 缺点:每个记录都需要额外的存储空间,需要更多的检查工作,以及一些额外的维护工作。
  5. MVCC只在可重复读和读以提交两个隔离级别工作。

存储引擎

(待补充)

事务的隔离级别

(待补充)

索引

(待补充)