默认隔离级别 可重复读, autocommit=1, 建表:
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`age` tinyint(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_age` (`age`) USING BTREE
) ENGINE=InnoDB ;
INSERT into test (id,age) values (1,1);
session 1:
update test set age=1 where id=1;
session 2:
update test set id=1 where age =1;
那么 session 1 和 2 是否有可能产生死锁?
session 1 是先锁主键,再锁二级索引. session 2 是先锁二级索引再锁主键.
我在本地上各开了二十个线程来不停 update,没有出现死锁. 为什么呢?
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`age` tinyint(3) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_age` (`age`) USING BTREE
) ENGINE=InnoDB ;
INSERT into test (id,age) values (1,1);
session 1:
update test set age=1 where id=1;
session 2:
update test set id=1 where age =1;
那么 session 1 和 2 是否有可能产生死锁?
session 1 是先锁主键,再锁二级索引. session 2 是先锁二级索引再锁主键.
我在本地上各开了二十个线程来不停 update,没有出现死锁. 为什么呢?
