除非通过加字段来控制加锁也不能让别人看不见oracle本身不能让人不能select
解决方案 »
- sql救急
- 看一个问题,游标
- 求海量数据统计方法(方案)数据库为Oracle,给一定建议,谢谢!在线等。有具体说明。
- oracle10g下无法启动isqlplus服务
- 求助:关于“ORA-12154: TNS: 无法处理服务名”的问题
- ORACLE9i安装问题,谢谢高手指点下,实在是没办法了
- T-Sql解释-急
- 向oracle8i导入ACCESS2003表格数据的问题(在线等!!!)
- 上次去一家外企面试的SQL题,没写出来,请写SQL语句的高手请进来看看这个复杂查询怎么写!?
- 如何利用一个数据库的所有相关文件,在一个不能创建数据库的机器上创建数据库?急
- 在Erwin4.0中,定义了一个表后,表里的字段排序顺序为何老是变化?
- 请大家给4位斑竹提出建议和看法,如何把oarcle版办的更好呢?
1、用户A选出的数据为
lsh1 1 23 0
lsh2 0 24 0
用户A选出数据之后户把flag更新为1
2、假如用户B这个时候选出的数据也为
lsh1 1 23 0
lsh2 0 24 0
但只要B更新不成功也就达到目的了。
加上事务级锁可以这样
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
A选择数据并更新,如果在这个期间,B选择数据也更新,则B返回异常!
我不太同意您的意见,
有三个条件适合使用串行化事务:
1、具有很高的没有别人修改数据的可能性。
2、需要事务级的读一致性。
3、将进行短的事物。一般使用SELECT。FOR UPDATE {NO WAIT}
来串行化访问。
使用一临时表
当一用户欲要SELECT
时,将where age>=23 and rownum<3
从主表移到临时表等待处理
但临时表比原表多一个字段,控制的是每个session的特征(不是数据库用户),大家都使用同一用户,一定要能区分,可以使用sys_guid这类函数来获得该值然后查询的时候用原表记录 minus 临时表记录大数据量不合适!当然,个人以为,原表加个字段是比较好的选择
加lock毕竟不好,不能给用户返回错误的!
我看他的过程不大,才建议他这么做。
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
还有,他的过程不可以执行的很频繁吧,只是有可能有这样的情况。
这种方法也不是不可以
SELECT。FOR UPDATE {NO WAIT}是锁定该记录,那B一样可以读,
同样返回异常。
临时表或加字段,首先要考虑修改数据库的问题,设计阶段还好说。
返回异常并不是返回错误,异常是可以再处理的。