MySQL Concurrency Control

MySQL 并发控制

无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题。

MySQL在两个层面的并发控制:

  • 服务器层

  • 存储引擎层

读写锁

在处理并发读或写时,可以通过实现一个由两种类型的锁组成的锁系统解决问题。

这两种锁通常被称为共享锁(shared lock)和排他锁(exclusive lock,读锁/写锁)

锁类型


表锁(table lock)


行级锁(row lock)

row lock可以最大程度地支持并发处理,但是同时也带来了最大的锁开销。

在InnoDB和XtraDB,以及其他一些存储引擎实现了行级锁。行级锁只在存储引擎层实现,而MySQL服务层没有实现。服务层完全不了解存储引擎中的锁实现。

事务

事务:一组原子性的SQL查询,或者一个独立的工作单元。如果其中的任何一条语句因为奔溃或其他原因无法执行,那么所有的语句都不会执行。

事务日志

AUTOCOMMIT

MySQL默认采用自动提交(AUTOCOMMIT)模式。如果不显式地开始一个事务,则每个查询都被当作一个事务执行提交操作。