【数据库事务与锁机制】- 事务隔离的实现

【摘要】 在MySQL InnoDB (下称MySQL)中实现事务的隔离性是通过锁实现的,大家知道在并发场景下我常用的隔离和一致性措施往往是通过锁实现,所以锁也是数据库系统常用的一致性措施。

事实上在数据库引擎的实现中并不能实现完全的事务隔离,比如串行化。这种事务隔离方式虽然是比较理想的隔离措施,但是会对并发性能产生比较大的影响,所以在MySQL中事务的默认隔离级别是 REPEATABLE READS(可重复读),下面我们展开讨论一下MySQL对数据库隔离性的实现。

MySQL 事务隔离性的实现

在MySQL InnoDB (下称MySQL)中实现事务的隔离性是通过锁实现的,大家知道在并发场景下我常用的隔离和一致性措施往往是通过锁实现,所以锁也是数据库系统常用的一致性措施。

MySQL锁的分类

我们主要讨论InnoDB 锁的实现,但是也有必要简单了解MySQL中其他数据库引擎对锁的实现。整体来说MySQL 中可以分为三种锁的类型 表锁、行锁、页锁,其中使用表锁的是 MyISAM引擎,支持行锁的是 InnoDB 引擎,同时InnoDB也支持表锁,BDB 支持页锁(不是太了解)。

表锁 table-level locking

表级别的锁顾名思义就是加锁的维度是表级别的,是给一个表上锁,这种锁的特点是 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,但是并发度也是最低的,表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用。

MySQL 表锁的使用

在MySQL中使用表锁比较简单,可以通过 LOCK TABLE 语句对一张表进行加锁,如下:

# 加锁
LOCK TABLE T_XXXXXXXXX;
# 解锁
UNLOCK TABLES;
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享