一个关于MySQL中update的问题

在操作过程中可能出现多个请求竞争同一条记录的修改权的情况
,这种情况我自己想到的是使用 update table this = this +- 变化量的方法
。不知道有没有更好的方法,如果有的话麻烦给出一下理由。

补充:有没有办法可以只锁一条数据(程序实现也可以,达到理论上的只锁一条数据),不锁整张表的

本人不长上,不能保诚采纳及时,请见谅。

可将更新方法添加进程锁,防止并发修改异常

使用分布式锁,或者update中where条件控制 如防止库存超扣
update table set count = count-qty where count-qty>=0

你可以在调用更新的那个方法上加锁,如果此时有正在执行update操作,那么这个方法就锁住,不允许其他方法继续访问,等update完毕后在开锁,这样就可以避免同时操作一条数据,但就是程序运行比较慢

没有太明白您表达的意思,MySQL的默认事务隔离级别是重复读,别的事务不能进行update操作。还说你这个给你更新有什么问题,是要加锁还是怎样。

可以在调用更新的那个方法上加锁

可以加上业务条件,保证并发不出问题

在调用更新的那个方法上加锁lock就可以解决了!

oracle 中可以用 select t.* ,t.rowid from table t 来实现仅锁一条数据

一般很少会有这种情况出现的。MySql有自己的锁机制,当执行一个修改操作时,MySql会对这个操作上锁。此时如果接收到另外的修改请求,那么这个请求就会因已经上了锁而被压入执行队列。当先前那个操作完成后,锁才会打开,那么,MySql才会去队列里取出下一个操作来执行。

可以的话多加个标记字段,每次用rownum进行更新,更新的时候把标记状态修改为已更新,然后存储过程循环调用,直到更新完毕

可以增加一个字段(version),标记为0,以后每次修改前就看一下这个version,
修改后保存再看是不是一样,一样则修改,不一样就不修改,回退事件,
同时也可以操作数据一次,version++,表示此条数据操作了多少次
就是加一个标志位
菜鸟回答,希望对你有用

行级锁是根据索引实现的 , 如果你后面有where 条件的话 你把条件后的字段加上索引 就ok了