select*from classes where id=80 lock in share mode; -- 锁住当前这条数据、不允许对该数据做删除和修改操作、否则会抛出异常、可以不加锁查询、可以加共享锁查询、但不可加排他锁查询update student set classid=80where id=1001
悲观锁之排他锁、作用于【单表的业务】、单表锁住后,直至我读写完数据后、别人才能读写数据
并发时for update会使B一直阻塞,等待A操作完成后执行B操作;
并发时for update 对记录加写锁,此时记录不能被其他线程加读锁或者写锁。
必须按照锁的先后顺序执行
select*from student FORUPDATE; -- 锁住这张表的查询和修改操作、其他线程可以查询、但不可修改、亦不可加锁查询deletefrom student where id=23763;
案例代码:
publicinterfaceStudentDao {
@Select("select * from student where id=#{id} lock in share mode")
List<Student> getStudentAll(int id);
@Delete("delete from student where id=#{id}")intdelete(int id);
@Update("update student set name=#{name},pwd=#{pwd} where id=#{id}")intupdate(@Param("name")String name,@Param("pwd")String pwd,@Param("id")int id);
@Select("select * from student where id=#{id} for update")
List<Student> getStudentAll22(int id);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具