select math from zje where math>60 lock in share mode;
select math from zje where math >60 for update;
CREATE TABLE `user` ( `name` VARCHAR(32) DEFAULT NULL, `count` INT(11) DEFAULT NULL, `id` INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 -- 这里,我们建一个user表,主键为id -- A通过主键执行插入操作,但事务未提交 update user set count=10 where id=1; -- B在此时也执行更新操作 update user set count=10 where id=2; -- 由于是通过主键选中的,为行级锁,A和B操作的不是同一行,B执行的操作是可以执行的 -- A通过name执行插入操作,但事务未提交 update user set count=10 where name='xxx'; -- B在此时也执行更新操作 update user set count=10 where id=2; -- 由于是通过非主键或索引选中的,升级为为表级锁,-- B则无法对该表进行更新或插入操作,只有当A提交事务后,B才会成功执行
-- A用户对id=1的记录进行加锁 select * from user where id=1 for update; -- B用户无法对该记录进行操作 update user set count=10 where id=1; -- A用户commit以后则B用户可以对该记录进行操作
-- 用户A update user set count=8 where id>2 and id<6 -- 用户B update user set count=10 where id=5;