最近在做商城的后台订单系统,需要在对正在编辑的订单记录进行锁定,修改完才去解锁,
避免客服之间的订单处理出现数据不一致或被覆盖。网上有三中解决方法:
1、独占模式 2、记录集锁定 3、页面锁定但是不知道具体怎么实现。我是用Java+MySQL开发的。请教高手!!!!!
避免客服之间的订单处理出现数据不一致或被覆盖。网上有三中解决方法:
1、独占模式 2、记录集锁定 3、页面锁定但是不知道具体怎么实现。我是用Java+MySQL开发的。请教高手!!!!!
解决方案 »
- mysql如何记录查看SQL命令错误日志
- mysql实用sqlyog community dump出的sql文件中汉字显示为乱码
- MySQL表级锁,行级锁,页级锁 哪位大哥简单明了地讲解一下
- WWWWA进来,谢谢
- create table ,用union 有什么好处
- 请教一下,把MSSQL数据库导到MYSQL里面的时候出现BLOB错误该怎样做呢?
- 怎么不能连接mysql??
- WindowsMySQL问题:怎样在已建表中插入新的一列?
- mysql的安装
- C#将多个mysql数据库备份成一个xml文件并还原数据时,遇到的字段类型问题
- 有大神用过dotproject吗 你们怎么解决的数据库乱码问题
- mysql_stmt_fetch 奇怪的问题..
因为这些锁是基于连接的,一旦连接释放,这些锁是自动释放。
而B/S结构的特点是, 每一次请求都是一个连接,请求完,连接释放。锁也自动释放。所以只能按1楼的方法,自己增加字段来模拟锁。
但必须有个自动清除锁的机制,以免客人中断提交,导致这个锁永远存在的问题。
2是不是可以这样理解,数据库的事物功能是给相对短暂的保持服务的。而订单取走数据后,把数据相对保持很长的时间。而这段时间一般超过了,数据库连接的timeout。?
对楼主的问题,使用可复复读的可离级就够了。
关键在于业务逻辑的处理,建议使用模拟式的乐观锁定。即begin trans
update table set <col>=? where id=? and col=:old_col and col1=:old_col1 and col2=:old_col2 ....
commit trans
使用old值进行限制,如果在update期间,有人改了这条记录,那么这条update肯定不会成功,
affected_count必然会是0。
如果成功了,那么自然没有别人修改这条记录。
这是一种比较有效的做法。在Scott大作<<Oracle专家高级编程>>一书中屡有提及。