mysql数据库的行锁for update
1、登录mysql,在test数据库中新建一个表:
CREATE TABLE `shoufei` ( `id` int(11) NOT NULL AUTO_INCREMENT, `shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `xiangmu` varchar(20) NOT NULL, `jiage` float NOT NULL, `shuliang` int(11) NOT NULL, `jine` float DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

2、在表增加一些数据。
insert into `shoufei` (`id`, `shijian`, `xiangmu`, `jiage`, `shuliang`, `jine`) values('1','2019-01-28 11:15:52','银翘解毒丸','2','10','20');
insert into `shoufei` (`id`, `shijian`, `xiangmu`, `jiage`, `shuliang`, `jine`) values('2','2019-01-28 11:15:59','甘草片','15','2','30');
insert into `shoufei` (`id`, `shijian`, `xiangmu`, `jiage`, `shuliang`, `jine`) values('3','2019-01-28 11:16:04','阿莫西林','20','2','40');
insert into `shoufei` (`id`, `shijian`, `xiangmu`, `jiage`, `shuliang`, `jine`) values('4','2019-01-28 11:16:08','午时茶','8','1','8');
insert into `shoufei` (`id`, `shijian`, `xiangmu`, `jiage`, `shuliang`, `jine`) values('5','2019-01-28 11:16:12','银翘解毒丸','2','10','20');

3、在mysql中新建两个用户abc_1、abc_2,两个用户登录mysql。


4、abc_1用户对id=2的数据增加行锁:
SELECT * FROM shoufei WHERE id=2 FOR UPDATE;

5、abc_1用户对id=2的数据修改jiage=20:
UPDATE shoufei SET jiage=20 WHERE id=2;
abc_1用户没有提交任务,只能自己看到结果。


6、abc_2用户查询id=2的数据,其中jiage没有修改因为abc_1用户没有提交任务:
SELECT * FROM shoufei WHERE id=2;

7、abc_2用户对id=2的数据增加行锁(没有成功,超时,abc_1用户没有解锁):
SELECT * FROM shoufei WHERE id=2 FOR UPDATE;

8、abc_1用户提交任务commit,把id=2的数据jiage=20,解锁数据。

9、abc_2用户,查询id=2的数据并且加锁(解锁成功,查询abc_1用户修改的数据jiage=20):
SELECT * FROM shoufei WHERE id=2 FOR UPDATE;
