一、表锁
分为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