MySQL如何对表加锁、MySQL如何对行加锁
时间: 2023-08-10 20:05:20 浏览: 107
MySQL可以使用锁来控制对表和行的访问。下面分别介绍如何对表和行加锁。
1. 对表加锁
MySQL可以使用以下两种类型的锁来锁定整个表:
- 表级共享锁(Table-level shared lock,也称为读锁):允许多个会话同时读取表,但阻止任何会话获取写锁,也就是防止其他会话修改数据。
- 表级排他锁(Table-level exclusive lock,也称为写锁):阻止其他会话获取读锁或写锁,也就是防止其他会话读取或修改数据。
可以使用以下语句对表加锁:
- 对表加表级共享锁:
```
LOCK TABLES table_name READ;
```
- 对表加表级排他锁:
```
LOCK TABLES table_name WRITE;
```
2. 对行加锁
MySQL可以使用以下两种类型的锁来锁定行:
- 行级共享锁(Row-level shared lock):允许多个会话读取一行,但阻止其他会话获取排他锁。
- 行级排他锁(Row-level exclusive lock):阻止其他会话获取共享锁或排他锁,也就是防止其他会话读取或修改数据。
可以使用以下语句对行加锁:
- 对行加行级共享锁:
```
SELECT * FROM table_name WHERE key_col = key_value LOCK IN SHARE MODE;
```
- 对行加行级排他锁:
```
SELECT * FROM table_name WHERE key_col = key_value FOR UPDATE;
```
其中,key_col是索引列,key_value是索引值。这两个语句会返回符合条件的行,并对其加锁。
需要注意的是,行级锁只能在使用InnoDB存储引擎的表上使用。同时,加锁操作需要谨慎使用,否则可能会影响数据库的性能。
阅读全文