mysql插入数据insert导致的死锁示例
时间: 2023-02-10 13:59:51 浏览: 100
好的。
死锁是在两个或更多的事务(或进程)竞争访问数据资源时可能发生的状态。当事务 T1 尝试访问被事务 T2 锁定的数据资源时,并且 T2 同时也在尝试访问被 T1 锁定的数据资源时,就会发生死锁。
这里是一个简单的死锁示例,假设你有两个表 `A` 和 `B`:
```
CREATE TABLE A (
id INT PRIMARY KEY,
value INT
);
CREATE TABLE B (
id INT PRIMARY KEY,
value INT
);
```
现在,让我们在同一时间运行两个 MySQL 会话,并尝试在不同的顺序中对这两个表进行插入。
会话 1:
```
START TRANSACTION;
INSERT INTO A (id, value) VALUES (1, 100);
INSERT INTO B (id, value) VALUES (1, 200);
COMMIT;
```
会话 2:
```
START TRANSACTION;
INSERT INTO B (id, value) VALUES (1, 300);
INSERT INTO A (id, value) VALUES (1, 400);
COMMIT;
```
由于两个会话中的插入操作是独立运行的,因此会话 1 在它的第一个插入操作完成后就会对表 A 加锁。然后,会话 2 在它的第一个插入操作完成后就会对表 B 加锁。当会话 1 尝试执行它的第二个插入操作时,它会发现表 B 已经被锁定,所以它会停下来等待。同时,会话 2 也在尝试执行它的
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)