mysql读写锁

一、表锁
分为read锁和write锁
1、read锁,建立方法
比如我的服务器上有个某数据库,里面有两张表,分别是book和food。我有两台session要访问这个数据库。session1执行这个语句对book加read锁。

lock table book read;

那么现在session1对book加了读锁。之后,自己读book没问题,session2读book没问题。但是session1不能写book表(报错),也不能读其他表(报错)。session2写book表会阻塞(不会报错),等待session1将book表unlock会执行写操作。
2、write锁,环境同上

lock table book write;

session1对book建立了写锁,它可以读写这个表,不能读写其他表。
session2读写book都会阻塞。

二、行锁
不需要自己建立,InnoDB会自动加行锁。
行锁对于读操作无影响,影响写操作,主要update。
当一个session,update某个表的一行的时候,其他session可以读取这个行,但是不能写,会被阻塞。
但是不当操作导致索引失效,会导致行锁变成表锁。
三、间隙锁
当session1对表进行范围操作,会产生间隙锁。
四、对某一行加锁

select × from table where col=a for update

你可能感兴趣的:(mysql读写锁)