关于锁定数据行的问题 为了取得不重复的数据,我需要从table 中一行取得可用号码,我想在读取并修改的同时,不允许其他用户读取改行,当我释放后,其他用户才允许读取修改。 应该怎么做啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select ....... for update 方法1. 存储过程: select ... from table where .... for update; for update会锁定select出来的行.方法2. 在程序里: update table set column = column where ....; 这样并未改变值,但锁定了该行.直到commit; rollback; 不是吧, for update 只是不允许其他用户update或者delete ,但是还是可以select,我的想法是当我从开始读取这样数据的时候,其他用户就已经不可以在select 了,只有当我update完成以后,他们才可以读取我已经修改过的数据。 举个例子, table 中我要update的这行数据,最大的可用号是 06001,我读取后,然后update成06002,当我修改完成以后,其他用户在读取到06002,如果用for update ,那我再没有修改成06002前,其他用户还是可以读取到06001啊? 不知道我的描述详细吗? 那就先delete原来的,再Insert新的 delete 和 update 没有区别吧?同样存在这个问题阿 增加一个字段Flag当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1' 没有必要一个用户在Update 的时候禁止另外一个用户Select 操作的。看楼主的意思是不是想防止第二用户读取到脏数据,并在脏数据的基础上继续修改。 增加一个字段Flag当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1'---------------这种方法可行。 for update的方法行不通。 或者select * from tab for update skip locked 增加一个字段Flag当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1'-------------------这个方法不行,当修改但没有commit 的时候,其他用户看到的还是修改前的结果。 使用plsql无法识别oracle的hint关键字 oracle 异构服务 PLSQL修改Oracle数据库表的内容问题 ORACLE分布式事务中设置Commit point site的意义是什么? 跨数据库表间数据转移JDBC JAVA程序设计内存溢出问题求教(Oracle SQL) date格式转型!请教 急!!!请教高手!!! 一条sql语句 如何解决不能启动OracleOraHome81TNSListener服务的问题? Oracle7.3,WinNt4.0/监听会自动停止? 这种功能怎么实现? 急!!我在 oracle9i 中创建用户和表时遇到了问题!
for update会锁定select出来的行.方法2. 在程序里: update table set column = column where ....; 这样并未改变值,但锁定了该行.直到commit; rollback;
当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1'
当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1'
---------------
这种方法可行。 for update的方法行不通。
select * from tab for update skip locked
当修改的时候触发触发器修改Flag = '0',读取的时候增加一个条件 flag = '1'
-------------------
这个方法不行,当修改但没有commit 的时候,其他用户看到的还是修改前的结果。