社区
Web 开发
帖子详情
MYSQL select时锁定记录问题
土豆是我的最爱
2020-08-17 04:14:25
在使用SQL时,大都会遇到这样的问题,你Update一条记录时,需要通过Select来检索出其值或条件,然后在通过这个值来执行修改操作。
但当以上操作放到多线程中并发处理时会出现问题:某线程select了一条记录但还没来得及update时,另一个线程仍然可能会进来select到同一条记录。
请问应该符合解决
...全文
2269
3
打赏
收藏
MYSQL select时锁定记录问题
在使用SQL时,大都会遇到这样的问题,你Update一条记录时,需要通过Select来检索出其值或条件,然后在通过这个值来执行修改操作。 但当以上操作放到多线程中并发处理时会出现问题:某线程select了一条记录但还没来得及update时,另一个线程仍然可能会进来select到同一条记录。 请问应该符合解决
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kris2088
2020-08-18
打赏
举报
回复
每条记录加一个版本号,防止脏数据是个办法
亦夜
2020-08-17
打赏
举报
回复
其实没太明白你的意思,你想通过select出来的值来进行更新,但是你在更新操作还没成功的同时又进行了select操作,那么这有什么问题呢,写和读着两者并不冲突,如果你是希望第二个读 读取到的是前一个写操作后的最新值,那你完全可以在执行update的时候锁住当前表,但是如果你的并发较高,这不是可取的办法,或者你可以通过乐观锁给表增加版本号,写操作会导致版本增加,读操作可进行对比版本是否变化,来判断是否是最新数据,但是这有依旧无法第一时间获取到最新数据,可以通过让写操作返回值的方式来判断数据是否更新来进行查询
快叫我java小菜鸟
2020-08-17
打赏
举报
回复
配置数据库事务的隔离级别为SERIALIZABLE,同时为所有数据库操作开启事务
MySQL
中的
SELECT
FOR UPDATE的用法与原理
MySQL
中的
SELECT
FOR UPDATE 是一种行级
锁定
机制,它允许在事务中对查询结果集中的行进行加锁,以防止其他事务对这些行进行修改或删除。这种
锁定
机制通常用于确保事务的隔离性和数据的一致性,特别是在高并发环境...
mysql
- insert
select
带来的锁
问题
进行
记录
的插入
时
,如果
select
的表是innodb类型的,不论insert的表是什么类型的表,都会对
select
的表的纪录进行
锁定
。对于那些从oracle迁移过来的应用,需要特别的注意,因为oracle并不存在类似的
问题
,所以在oracle...
mysql
select
for_
MySQL
在事务中使用
SELECT
... FOR UPDATE
在数据库的操作中,经常发生数据并发...(开启终端会话可以使用
MySQL
Shell,安装和使用方法详见另一篇博文如何使用
MySQL
Shell连接数据库)先开启第一个会话,依次执行以下语句将id为3的
记录
中数学成绩加10:start tr...
记录
不存在如何加锁
MySQL
_innodb
select
for update 没有满足条件的
记录
的情况下 是怎么加锁的呢?...
在REPEATABLE-READ隔离级别下,如果两个线程同
时
对同一张表用
SELECT
…FOR UPDATE加锁,在没有符合该条件
记录
情况下,两个线程都会加锁成功。程序发现
记录
尚不存在,就试图插入一条新
记录
,如果两个线程都这么做,就...
Web 开发
81,116
社区成员
341,730
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章