数据库事务锁详解

上篇说到数据库事务中的特性ACID和4个隔离级别,今儿就来看一下事务中的锁。

MySQL中的锁

锁是MySQL在服务器层和存储引擎层的并发控制,锁可以保证数据并发访问的一致性、有效性;

锁冲突也是影响数据库并发访问性能的一个重要因素

MySQL有三种级别的锁:「表级锁、行级锁、页级锁」


表级锁行级锁业级锁特点开销小、加锁快开销大、加锁慢加锁时间介于其余两者之间是否会死锁否是是并发度粒度大、锁冲突概率最高、并发低粒度小、锁冲突概率低、并发高粒度介于其余两者之间、并发一般存储引擎Innodb、MyISAMInnodbBDB

「术语:」

DDL,Data Definition Language,数据库定义语言

比如:CREATE,ALERT,DROP,TRUNCATE

DML,Data Manipulation Language,数据库操作语言

比如:SELECT,INSERT,UPDATE,DELETE,CALL,EXPLAIN PLAN,LOCK

DCL,Data Control Language,数据库控制语言

比如:COMMIT,SAVEPOINT,ROLLBACK,SET TRANSACTION

Innodb中的锁

表锁和行锁

表锁

Innodb有两种内部使用的意向锁(Intention Locks),都是表锁。

表锁分成三种:

「意向共享锁(IS):」

事务计划给数据行加行共享锁,加共享锁之前必先获取该锁

「意向排他锁(IX):」

事务打算给数据行加行排他锁,加排他锁之前必先获取该锁

「自增锁(AUTO-INC Locks):」

特殊表锁,自增长计数器通过该“锁”来获得子增长计数器最大的计数值。

在加行锁之前必须先获得表级意向锁,否则等待 innodb_lock_wait_timeout 超时后根据innodb_rollback_on_timeout 决定是否回滚事务。

如何添加表锁

lock tables table_name read/write

「释放锁:」

释放锁不需要添加参数,其会释放当前用户的所有锁。

unlock tables

「例如:」

1、给student表添加读锁,看当前用户和其他用户是否能插入数据:

数据库事务锁详解

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdsfs.html