首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >select......for update 语句的功能是什么? 会锁表还是锁行?

select......for update 语句的功能是什么? 会锁表还是锁行?

作者头像
一写代码就开心
发布2022-08-03 17:32:46
发布2022-08-03 17:32:46
1.7K0
举报
文章被收录于专栏:java和pythonjava和python

目录

1 语句意思

在项目代码里,看到

代码语言:javascript
复制
select * from xxl_job_lock where lock_name = 'schedule_lock' for update

以上的代码的意思是什么

select查询语句是不会加锁的,但是select …for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。

那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。

没用索引/主键的话就是表锁,否则就是是行锁。

2 思路

新建一个表,我们使用xxl-job 里面的表

他的这个表,这个字段是主键

我们首先是关闭自动提交 需要关闭自动提交,通过set @@autocommit=0; 设置为手动提交。0代表手动提交,1代表自动提交。 必须先关闭,不然语句一执行,就提交了,我们看不出我们要的结果

关闭之后,执行语句

代码语言:javascript
复制
select * from xxl_job_lock where lock_name = 'schedule_lock' for update

以上查询语句的意思是,不仅仅要查询,还要对这个sql语句进行加锁;一加锁之后,其他的线程要操作这个表,就被卡住了,要等到这个sql语句执行完成,其他线程对这个表的操作,才会执行,不然一直等,这样就实现了排它锁

我们就可以使用采用 select for update ,是排它锁。说白了 xxl-job 用一张数据库表来当分布式锁了,确保多个 xxl-job admin 节点下,依旧只能同时执行一个调度线程任务

代码语言:javascript
复制
多线程下,对同一个数据库操作,我们就可以在这个数据库
单独创建一个表,这个表当做分布式锁就可以了
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1 语句意思
  • 2 思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档