浅谈数据库锁机制

来源:互联网 发布:战舰少女程序员 编辑:程序博客网 时间:2024/06/11 17:12

1MYSQL锁类型

1) 共享锁

共享锁的代号是S,共享锁的锁粒度是行或元组(多个行)。一个事务获取了共享锁之后,可以对锁定范围内的数据执行读操作。 

 

2) 排它锁

排它锁的代号是X,排它锁的粒度与共享锁相同,也是行或元组。一个事务获取了排它锁之后,可以对锁定范围内的数据执行写操作。

eg:

假设有两个事务T1和T2:
如果事务T1获取了一个元组的共享锁,事务T2还可以立即获取这个元组的共享锁,但不能立即获取这个元组的排它锁(必须等到T1释放共享锁之后)。
如果事务T1获取了一个元组的排它锁,事务T2不能立即获取这个元组的排共享锁,也不能立即获取这个元组的排它锁(必须等到T1释放排它锁之后)。

 

3) 意向锁

意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁(IS)和意向排它锁(IX)两类。意向共享锁表示一个事务有意对数据上共享锁;意向排它锁表示一个事务有意对数据上排它锁。

使用意向锁来保护锁层次结构的底层资源,以防止其他事务对自己锁住的资源造成伤害。

意向锁可以提高性能,因为数据库引擎仅在表级检查意向锁,确定事务是否能安全地获取该表上的锁,而不需要检查表中的每行或每页上的锁以确定事务是否可以锁定整个表。

eg:

当读取表里的页面时,在请求页共享锁(S锁)之前,事务在表级请求意向共享锁,防止其他事务随后在表上获取排他锁(X锁),修改整个表格。

 

2、MYSQL锁级别

1) 表级锁:直接锁定整张表,在锁定期间,其它进程无法对该表进行写操作,若是排他锁,则其它进程读也不允许。开销小,加锁快,不会出现死锁,冲突概率高,并发度低。

2) 行级锁:仅对指定的记录进行加锁,其它进程还是可以对同一个表中的其它记录进行操作。开销大,加锁慢,会出现死锁,冲突概率低,并发度高。

3) 页级锁:页级锁取了折衷,一次锁定相邻的一组记录。开销和加锁时间界于表级锁和行级锁之间,会出现死锁,并发度一般。

1 0
原创粉丝点击