请问如何让2个事务*互斥不进行等待*,马上报出错误。
其实我就是想问怎么实现像在oracle里那个for   update   nowait的功能。   
 我的需求是: 
             公司要给A加班费100块钱,我看到了,给A准备100块钱,正在我准备的时候,公司说要给A   300块钱,这时候别人看到了,就准备给A   300元。而实际上,另外的那个人应该看到我正在给A   100块钱的时候(也就是我占有A的数据的更新权限的时候),就报错,说A正在被我更新。   
 现在我的问题是: 
 在我试验的所有内容,包括 
 lock   tables   tt   write 
 select   *   from   tt   for   update; 
 .... 
 unlock   tables 
 和 
 start   transaction 
 select   *   from   tt   lock   in   share   mode; 
 .... 
 commit/rollback 
 这两种方法, 
 都是一个事物在没有解开的时候,另一个总是等待。   
 我找了2、3天了,不知道是我笨还是点儿背, 
 都没有找到怎么让第2个事务不等待,马上报错的办法。   
 请问mysql里面,有没有能实现“nowait”的类似方法?   
 谢谢!   
 good   luck   
------解决方案--------------------虽然我不太了解,但好像是可以用get_lock()与release_lock().   
 首先A事物用get_lock( "uplock ",10),MYSQL返回1就是可以取得锁,B事务要进行工作先也要get_lock( "uplock ",10)一下,如果10秒内得不到锁,MYSQL就会返回0,A事务完成后release_lock( "uplock "),B事务再get_lock就可以得到锁进行自己的工作了.
------解决方案--------------------因为没有NOWAIT,所以设计的时候尽量将TRANSACTION占用短的时间,最忌讳在一个TRANSACTION中有交互动作, 
 设计的模型应该是: 
 1。SELECT * FROM XXXX WHERE KEY=XXX -- 你的客户软件要有缓冲功能,即能保存旧值 
 2。交互动作,中间你可能去厕所 
 3。提交,这时启动TRANSACTION,因为你所修改的资料可能在服务器被他人修改,所以要比较原值。 
 START TRANSACTION 
 SEKLECT * FROM XXX WHERE KEY=XXX FOR UPDATE; -- 加锁 
 如果服务器当前值 <> 上次SELECT出来的旧值 则报错,否则更新 
 COMMIT