数据库学习(三)之锁机制

一、锁机制

解决因资源共享,而造成的并发问题

示例:买最后一件衣服X

A: 看见X 买了X

B: 看见X 买了X

解决方法:

A: 看见X 买:X加锁->试衣服、下单、付款、打包->X解锁

B: 看见X 买:发现X已被解锁,等待X解锁,解锁完毕,X已售空

1、分类

1.1 操作类型

  • 读锁(共享锁):对同一个数据(衣服),多个读操作可以同时进行,互不干扰
  • 写锁(互斥锁):如果当前写操作没有完毕(买衣服的一系列操作),则无法进行其他的读操作、写操作

1.2 操作范围

  • 表锁:一次性对一张表整体加锁。

    如MyISAM存储引擎使用表锁,开销小,加锁快;无死锁;但锁的范围大,容易发生锁冲突,并发度低。

  • 行锁:一次性对一条数据加锁

    如InnoDB存储引擎使用行锁,开销大,加锁慢;容易出现死锁;锁的范围较小,不易发生锁冲突,并发度高(很小概率发生高并发问题:脏读、幻读、不可重复读、丢失更新等)

  • 页锁

1.3 示例

表锁:

1
2
3
4
5
6
7
8
9
10
11
12
-- 创建表
create table tablelock(
id int primary key auto_increment,
name varchar(20)
)engine myisam;

-- 增加表数据
insert into tablelock(name) values('a1');
insert into tablelock(name) values('a2');
insert into tablelock(name) values('a3');
insert into tablelock(name) values('a4');
insert into tablelock(name) values('a5');
0%