MySQL中select ... for update会锁表还是锁行?
select查询语句是不会加锁的,但是select ... for update除了有查询的作用外,还会加锁,而且它是悲观锁。
那么它加的是行锁还是表锁,这就要看是不是用了索引或者主键。没用索引或者主键的话就是表锁,否则就是是行锁。
一、验证
首先构建一张user表,id为主键,基于name创建了唯一索引:
CREATE TABLE `user` (
`id` int(1) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(1) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX name_index(name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入两行记录:
insert into `user` (`id`, `name`, `age`) values('1','张三','20');
insert into `user` (`id`, `name`, `age`) values('2','李四','22');
查看MySQL数据库是否自动提交事务的SQL命