mysql跳过锁定记录_MYSQL 在进行Update的时候,怎么样跳过被锁住的记录?

第一进程

start transaction;

update users set age = 33 where id = 1;

更新ID 1为Age=33,但不进行提交时

第二进程

update users set age = 44

要更新全部记录Age=44

但原因是第一进程中更新了ID1,会导致第二进程等待第一进程结束

然后这个第二进和的更新,怎么样让他跳过被锁的记录,也就是有被锁了的记录的话,不更新,直接跳过

解决方案

20

这个实现不了  除非你的第二条update通过where过滤掉id=1的记录

试想假如自动过滤掉,那岂不是你的第二条语句完全没按照SQL语句的预期执行了

20

恩 去查了一下  这块还真没了解过

oracle和mssql 好像都支持

例如nowait skip nolock 和  With (READPAST)

20

这个是不能实现的,mysql就算锁住单行数据,但是其他线程还是会有读锁的,

本人觉得你要实现这样的功能,你可以给这个表再加上个字段,用于表示能否被某个线程读取,

被读取的时候可以把这个标志位改成1,然后其他线程在update的时候根据这个标识位为0的,这样就无法读取到了

20

这个不管事 oracle,sql server,db2,还是mysql,都是无法实现的。

原因是在两个update语句修改数据时,要独占资源,然后修改数据,假如第一个会话不及时提交,那么第二个会话就会被第一个锁住,这个是数据库的基本特性决定的,也就是说数据库之所以是数据库,不是excel,文本文件,是原因是基于事务的ACID特性的,在这个基础上之上,才去进一步发展。

20

你提到的实际上是在不违背数据正确的前提之下,假如数据锁住了,就跳过这条记录,也是和事务基本性质违背的,所以基本上全部的数据库都没有提供这样的 跳过锁定记录的特性。

另外,例如,在sql server里,有一种特性是 在查询数据时,跳过已锁定的记录,通过readpast来实现,但是这个只是去读取数据,而不是修改数据,所以这个也没什么用。

本人在想,假如你真的要实现这种办法,你可以看看mysql里有没有哪里能查询到 哪些记录是被锁定的,假如锁定了,你就不去修改这条数据。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MYSQL 在进行Update的时候,怎么样跳过被锁住的记录?!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值