springboot+mybatis+mysql使用select * where id= for update悲观锁,排他锁,对数据进行行级锁定
场景:库存超卖等。
·
场景:库存超卖等,并发不是很大的情况下使用下
mysql测试使用,用多个客户端来检测,两个命令窗口,或 一个mysql,一个idea等等
start TRANSACTION ;
SELECT * FROM product where id=60 for UPDATE;
-- 测试, 先执行上面两名,就上锁了,另个事务想修改这条记录就不行
COMMIT;
-- 等这个事务提交了,就可以正常操作了
特别注意:where 后面的条件必须是主键索引或唯一索引,或是添加了索引 ,否则会升级为表锁,那就玩大了
------------------------------------------------------------------------------------
语法和程序中使用:
1 mybatis的sql语句做以下更改
SELECT * FROM 表 where id=1 for UPDATE;
2 执行方法上面添加事务注解,必须,不要忘了
@Transactional(rollbackFor = Exception.class)

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)