看了一些关于mysql INNODB 加锁的分析。 如果修改了主键信息,会加主键索引锁和所有非聚簇索引锁,修改 了非聚簇索引列值会加该种非聚簇索引锁,然后加主键索引锁。
加入有个表
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`descs` varchar(30) DEFAULT NULL,
`extra` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `descs` (`descs`)
)
INSERT INTO `test`(`id`,`name`,`descs`,`extra`) VALUES ( 1,'ll','3','2');
以下2个sql 如果同时执行,是不是应该会发生死锁。
UPDATE test SET descs="dd" WHERE id = 1
加锁顺序 先获取 主键索引锁 然后 获取 name索引锁。
UPDATE test SET descs="dd" WHERE name = "ll"
加锁顺序 先获取 name索引锁 然后 或许 主键索引锁
这样理论上,不同事物分别执行上面的sql ,是有可能发生死锁的。
是否是这样的情况? 但是我测试好像没有发生死锁。
闭关修行中......