SELECT FOR UPDATE

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/mayongzhan - 马永占,myz,mayongzhan

SELECT * FROM myz FOR UPDATE; 在innoDB下使用. 在start transaction和commit/rollback中间使用 只锁定被选择行 (要有主键,并且明确表明在操作哪个主键),未指明或无主键则锁表 必须在事务中使用.在rollback或者commit后,锁定的内容才可以使用

FOR UPDATE的这些特性可以被应用在类似银行的系统上

比如一个银行帐户.有1000元 在taobao上消费的同时在tenpay上消费.那么 在taobao上消费金额100,在tenpay上消费金额150.不使用for update的话.可能会产生只消费一次的情况.

过程: Taobao花100元,银行取出1000(步骤一),然后减去100(步骤二),然后.把900存回(步骤三). Tenpay花150元,银行取出900(步骤一),然后减去150(步骤二) ,然后.把750存回(步骤三). 看上去没有错误,但是有可能在taobao的第二步第三步之间的时候,tenpay进行第一步…那么tenpay取到的就是1000,然后减去150,钱是850就是少消费了一次.这当然是不行的.

所以这时FOR UPDATE就该派上用场了.taobao操作的时候for update 锁定操作的那行.然后等taobao操作完成后.tenpay才可以执行第一步.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值