mysql INNODB update语句加锁顺序
阿神
阿神 2017-04-17 13:41:26
0
0
741

看了一些关于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 ,是有可能发生死锁的。

是否是这样的情况? 但是我测试好像没有发生死锁。

阿神
阿神

闭关修行中......

reply all(0)
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template