一、Myisam中的锁
Myisam中有读锁与写锁。只有表锁,无行锁。
那么也就是其中只有表级的行锁与表级的写锁。
我们可以通过命令来模拟上锁与解锁的过程。
二、上锁
读锁:
lock table a read;
写锁:
lock table a write;
三、解锁
unlock tables;
四、查询锁
show open tables;
show open tables where in_use >= 1;
show open tables where `table` = 'a';
查询出来的字段含义:
database:含有该表的数据库。
table:表名称。
in_use:如果为1,表面正在被使用中,也就是在锁中,如果为0,表明表打开中,但是当前没有被使用。
name_locked:表名称是否被锁定,名称锁定用于取消表或者表进行重命名。
五、锁的区别
对表上读锁,其他线程或进程可以读这个表,但是写这个表需要等待。
对表上写锁,其他线程或进程读这个表需要等待,写这个表也需要进行等待。
六、Myisam机制
Myisam在执行查询之前,会自动给对应的表加读锁。
在执行增删改前,会自动给对应的表加写锁。
七、总结
读锁会阻塞写,但是不会阻塞读。写锁会把读和写都阻塞掉。