其实我就是想问怎么实现像在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
公司要给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
解决方案 »
- 奇怪了,单独操作一个20多行的表也会进入慢查询?
- 使用myisamchk *.MYI检查表时,提示“.MYI”文件不存在
- 有哪个大师可以加我QQ,我想问个关于建数据库的问题。我不会上传图片……
- [真伪]数据库中 select count(1) 比 select count(*) 快?
- 删错表 能马上还原数据吗............
- 有用过MYSQL4.0.11以前版的吗??请问两个更新语句的事务怎么写??谢谢
- 紧急求助:如何在Weblogic6.0中设置Mysql的数据源连接池(坚决送分)
- mysql5.6安装过程中怎么要输入oracle support帐号了???以前装的时候怎么不用输。。
- 怎样设置互斥量
- 菜鸟一个,mysql.sock和mysql.sock.lock什么关系啊
- 关于取出一年内每个月的记录数,可否用一条SQL实现吗?
- ++++++++++++++期待高手帮我解决一个mysql 查询语句++++++++++
已经能锁定某个表了。不过看起来好像这种方法是对整个表进行锁定。
或者说这种方法更像一个对操作的表安装一个用来表示“已锁”或者“未锁”的“标志”。这样的话,
是不是对程序执行效率的影响会比较大呢?
mysql没有对行一级的锁定吗?oracle 里面的nowait关键字还是很方便的。mysql这点上不行?
不会只有我有这种需求吧??郁闷呀!
但POSTGRESQL有,和ORACLE很近
难道实现很难吗?? :(搞不懂了!还想了解一下,
其他大侠们是怎么解决这个问题的呀?good luck
设计的模型应该是:
1。SELECT * FROM XXXX WHERE KEY=XXX -- 你的客户软件要有缓冲功能,即能保存旧值
2。交互动作,中间你可能去厕所
3。提交,这时启动TRANSACTION,因为你所修改的资料可能在服务器被他人修改,所以要比较原值。
START TRANSACTION
SEKLECT * FROM XXX WHERE KEY=XXX FOR UPDATE; -- 加锁
如果服务器当前值<>上次SELECT出来的旧值 则报错,否则更新
COMMIT
每个表里面都有一个叫做“更新次数”的字段,
然后有共同函数进行处理。因为是共同函数,所以当时用的挺爽的,现在轮到自己写framework了,变成麻烦事了!
嘿嘿!不过也挺有意思的!谢谢你的回答了!
马上给分