事务对锁的影响
表结构
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`nickname` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
用户A:开启事务 修改ID = 1 的数据 ,未提交事务
set autocommit = 0; 开启事务
UPDATE `user` set name = 111 where id = 1;
用户B : 修改ID = 1的数据,则会阻塞,只有当A提交事务B用户才会执行
UPDATE `user` set name = 999 where id = 1; 等待
UPDATE `user` set name = 999 where id = 2; 执行成功 无需等待
--------------------------------------------------------
set autocommit = 0; 开启事务
UPDATE `user` set name = 111 where nickname = 'lisi'; //nickname有索引则行锁,无索引则表锁
结论:事务产生锁;事务中使用列如果有索引则会产生行锁,没有索引则产生表锁
mysql范围查询对锁的影响
set autocommit = 0;
UPDATE `user` set name = 111 where id >1 and id < 5 ;
#未提交事务
#锁定id >1 and id < 5 之间的数据,
#ID在id >1 and id < 5 之间的curd操作都会等待事务提交后才会执行