其实我就是想问怎么实现像在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
解决方案 »
- mysql Lock wait timeout exceeded
- 求问oracle向mysql迁移的问题
- ???jdbc 连接mysql问题???????
- MySQL修改外键约束
- 在PostgreSQL里怎样将纵向的不确定的查询结果变成横向的?
- 一个数型数据库表如何得到相应的list!!!!
- msyql数据库:id字段为自动增长。但我希望能在特定的时候归零,从1开始,怎么实现?
- php为何不能连接MYSQL数据库?
- 求美国 澳大利亚 加拿大行政区划数据库数据,精确到城市
- 新人求助,自学小问题
- 关于取出一年内每个月的记录数,可否用一条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了,变成麻烦事了!
嘿嘿!不过也挺有意思的!谢谢你的回答了!
马上给分