2。有个同事写了个方法来解决并发,不知道有没有什么问题?
就是在一个事务里面 先用select money as 原始 from table
在用 update table set money=新值 where money=原始
这样来空值并发,对不对?
3。事务是隔离的,对于数据库来说是在一个时间点对一条记录只能有一个操作对吧?
如果是这样我想上面控制并发没问题
4。不知道各位大哥在具体项目采用什么方法来解决并发的。
谢谢
13 个解决方案
#1
#2
自己顶下
#3
#4
你同事写的这种方法称为乐观锁。
乐观锁顾名思义就是在操作时很乐观,这数据只有我在用,我先尽管用,最后发现不行时就回滚。
悲观锁在操作时很悲观,生怕数据被其他人更新掉,我就先将其先锁住,让别人用不了,我操作完成后再释放掉。
悲观锁需要数据库级别上的的实现,程序中是做不到的,如果在长事务环境中,数据会一直被锁住,导致并发性能大大地降低。
乐观锁顾名思义就是在操作时很乐观,这数据只有我在用,我先尽管用,最后发现不行时就回滚。
悲观锁在操作时很悲观,生怕数据被其他人更新掉,我就先将其先锁住,让别人用不了,我操作完成后再释放掉。
悲观锁需要数据库级别上的的实现,程序中是做不到的,如果在长事务环境中,数据会一直被锁住,导致并发性能大大地降低。
#5
一般来说如果并发量很高的话,建议使用悲观锁,否则的话就使用乐观锁。
如果并发量很高时使用乐观锁的话,会导致很多的并发事务回滚、操作失败。
如果并发量很高时使用乐观锁的话,会导致很多的并发事务回滚、操作失败。
#6
IMHO,大部分应用,乐观锁足够了
#7
我同事写的这种方法没问题吧?
#8
当然有问题了,如果money主键/唯一,怎么可以随便更新?
#9
一般常见的检查,
表里有个revision字段,
将信息呈现给客户的时候,同时记住当前revision,
更新前检查相同id的记录的revision,ok的话,更新记录的同时,revision增加
表里有个revision字段,
将信息呈现给客户的时候,同时记住当前revision,
更新前检查相同id的记录的revision,ok的话,更新记录的同时,revision增加
#10
楼主同事既然用这个办法,那还不如这样子
UPDATE TABLE SET MONEY = MONEY + 变化的值 WHERE ID=?
UPDATE TABLE SET MONEY = MONEY + 变化的值 WHERE ID=?
#11
这个是什么意思?你的意思说如果money是主键就不行?
#12
乐观锁,悲观锁 很大程度上由 冲突的频率决定
冲突几率大用悲观 ,小就用乐观
冲突几率大用悲观 ,小就用乐观
#13
经验之谈,赞!
#1
#2
自己顶下
#3
#4
你同事写的这种方法称为乐观锁。
乐观锁顾名思义就是在操作时很乐观,这数据只有我在用,我先尽管用,最后发现不行时就回滚。
悲观锁在操作时很悲观,生怕数据被其他人更新掉,我就先将其先锁住,让别人用不了,我操作完成后再释放掉。
悲观锁需要数据库级别上的的实现,程序中是做不到的,如果在长事务环境中,数据会一直被锁住,导致并发性能大大地降低。
乐观锁顾名思义就是在操作时很乐观,这数据只有我在用,我先尽管用,最后发现不行时就回滚。
悲观锁在操作时很悲观,生怕数据被其他人更新掉,我就先将其先锁住,让别人用不了,我操作完成后再释放掉。
悲观锁需要数据库级别上的的实现,程序中是做不到的,如果在长事务环境中,数据会一直被锁住,导致并发性能大大地降低。
#5
一般来说如果并发量很高的话,建议使用悲观锁,否则的话就使用乐观锁。
如果并发量很高时使用乐观锁的话,会导致很多的并发事务回滚、操作失败。
如果并发量很高时使用乐观锁的话,会导致很多的并发事务回滚、操作失败。
#6
IMHO,大部分应用,乐观锁足够了
#7
我同事写的这种方法没问题吧?
#8
当然有问题了,如果money主键/唯一,怎么可以随便更新?
#9
一般常见的检查,
表里有个revision字段,
将信息呈现给客户的时候,同时记住当前revision,
更新前检查相同id的记录的revision,ok的话,更新记录的同时,revision增加
表里有个revision字段,
将信息呈现给客户的时候,同时记住当前revision,
更新前检查相同id的记录的revision,ok的话,更新记录的同时,revision增加
#10
楼主同事既然用这个办法,那还不如这样子
UPDATE TABLE SET MONEY = MONEY + 变化的值 WHERE ID=?
UPDATE TABLE SET MONEY = MONEY + 变化的值 WHERE ID=?
#11
这个是什么意思?你的意思说如果money是主键就不行?
#12
乐观锁,悲观锁 很大程度上由 冲突的频率决定
冲突几率大用悲观 ,小就用乐观
冲突几率大用悲观 ,小就用乐观
#13
经验之谈,赞!