辅助索引加锁经典案例
CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `c` (`c`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; nsert into t values(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25); mysql> select * from t; +----+------+------+ | id | c | d | +----+------+------+ | 0 | 0 | 0 | | 5 | 5 | 5 | | 10 | 10 | 10 | | 15 | 15 | 15 | | 20 | 20 | 20 | | 25 | 25 | 25 | +----+------+------+ 6 rows in set (0.00 sec)
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`c` int(11) DEFAULT NULL,
`d` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `c` (`c`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into t values(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);
RR隔离级别 | ||
session 1 | session2 | session 3 |
begin; delete from t where c=5; | ||
begin; delete from t where c=5; (block) | ||
begin; insert into t values(7,7,7); (block) | ||
rollback; | rollback; | rollback; |
session 1 | session2 | |
begin; delete from t where c=5; | ||
begin; delete from t where c=5; (block) | ||
insert into t values(7,7,7);(可以插入) | ||
insert into t values(2,2,2); | deadlock |