9. 数据库锁理论
-
根据操作类型,锁可分为
- 读锁(共享锁): 针对同一份数据,多个读操作可以同时进行而并不相互影响。
- 写锁(互斥锁): 当前写操作在没有完成之前,它会阻断其他写锁和读锁。
-
根据数据操作的粒度划分,锁可分为
- 表锁(偏读):
- 行锁(偏写):
- 页锁:
1. 创建表锁演示实例
-
建表 SQL:引擎选择 myisam
create table mylock ( id int not null primary key auto_increment, name varchar(20) default '' ) engine myisam; insert into mylock(name) values('a'); insert into mylock(name) values('b'); insert into mylock(name) values('c'); insert into mylock(name) values('d'); insert into mylock(name) values('e'); select * from mylock;
-
mylock 表中的测试数据
mysql> select * from mylock;
-
查看当前数据库中表的上锁情况:
show open tables;
,In_user 的值0 表示未上锁。 -
添加读/写锁
使用命令:lock table 表名1 read(write) [,表名2 read(write)]
为mylock表添加读锁,即lock table mylock read
;
添加之后,我们发现,依然可以读取mylock的数据。
虽然可以读取数据,但是修改数据是不允许的。修改数据时,光标不断的在闪烁。
接着,我们将读锁改为写锁,即 lock table mylock write
;
添加之后,我们发现,读取数据时会被阻塞,光标不断在闪烁。
最后,解锁,我们可以使用命令: unlock tables
;