死锁
来源:互联网 发布:c语言游戏编程 编辑:程序博客网 时间:2024/03/29 02:02
是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
表级锁不会产生死锁。所以解决死锁主要还是针对于最常用的InnoDB
先客户端A创建一个包含一个行的表,然后开始一个事务。在这个事务内,A通过在共享模式选择行获得对行的S 锁定:04
05
mysql>
CREATE
TABLE
t (i
INT
) ENGINE = InnoDB;
06
07
Query OK, 0
rows
affected (1.07 sec)
08
09
10
11
mysql>
INSERT
INTO
t (i)
VALUES
(1);
12
13
Query OK, 1 row affected (0.09 sec)
14
15
16
17
mysql> START
TRANSACTION
;
18
19
Query OK, 0
rows
affected (0.00 sec)
20
21
22
23
mysql>
SELECT
*
FROM
t
WHERE
i = 1 LOCK
IN
SHARE MODE;
24
25
+
------+
26
27
| i |
28
29
+
------+
30
31
| 1 |
32
33
+
------+
34
35
1 row
in
set
(0.10 sec)
36
37
接着,客户端B开始一个事务并尝试从该表删除行:
38
39
mysql> START
TRANSACTION
;
40
41
Query OK, 0
rows
affected (0.00 sec)
42
43
44
45
mysql>
DELETE
FROM
t
WHERE
i = 1;
46
47
删除操作要求一个X 锁定。因为这个锁定不兼容客户端A持有的S锁定,所以X 锁定不被允许,所以请求进入对行及客户端阻挡的锁定请求队列。
48
49
最后,客户端A也试图从表中删除该行:
50
51
mysql>
DELETE
FROM
t
WHERE
i = 1;
52
53
ERROR 1213 (40001): Deadlock found
when
trying
to
get lock;
54
55
try restarting
transaction
0 0
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- resteasy 统一的异常处理handler
- object c NSNumber
- CORBA通过IOR文件远程获取实现类
- 如何创造财富?硅谷创业之父 Paul Graham 《黑客与画家》思维导图
- MyEclipse8.6注册码亲测可用
- 死锁
- 为什么phpmyadmin数据库中只能插入数字,不能插入中英文
- Retrieve a list of all matches (提取所有匹配的列表)
- 请放下你的无效社交
- Python面向对象编程-封装
- iOS: autosizing
- 值得研究的J2EE开源项目推荐
- Oracle手工生成段建议(Segment Advisor)
- Row Cache Objects