日期:2014-05-19  浏览次数:20503 次

关于并发时逻辑上冲突(不是数据错误)的问题
现在假如库存数据为20,
A   读取,   发现为20,   就UPDATE   数据,申请领出15个,
B   同时读取,   发现有20个,   也申请15个.

因为B在申请之前一定会先读取,   然后申请,   但是假如A的Update   动作刚好发生在B的这两个读取和UPDATE   之间,   则数据会变成负数.  

固然,   可以用触发器保证库存不为负,   但是如果触发器拒绝B   的Update,   在程序里却会收到SQL   语句正常执行的结果,   也就是说,   虽然数据没有错误,   但是程序端却认为A   和B   都成功地申请到了15个.   ------怎么避免这种问题?

谢谢!!

------解决方案--------------------
使用事务,如果不完全执行时返回标识值
------解决方案--------------------
必面要用事务处理的.这是事务处理的经典使用案例.
------解决方案--------------------
你自己結合鎖的機制選擇一種方法吧。記得好像又一遍分析的比較仔細的貼。你找找