一、死锁示例
考虑下面一个MySQL死锁的示例:
有如下一张表:
CREATE TABLE `test` ( `id` int(20) NOT NULL, `name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
表中有如下数据:
mysql> SELECT * FROM test; +----+------+ | id | name | +----+------+ | 1 | 1 |
| 5 | 5 | | 10 | 10 | | 15 | 15 | | 20 | 20 | | 25 | 25 | +----+------+ 6 rows
in set (0.00 sec)
当数据库的隔离级别为Repeatable Read或Serializable时,我们来看这样的两个并发事务(场景一):
session1
session2
begin;
begin;
select * from test where id = 12 for update;