是这样的,
第一步:客户端检索数据时记录的对应的ROWID,然后检索游标断开
第二步:客户端利用记录的ROWID删除对应的数据,会不会删除错误的数据?在多用户时,其他用户删除了这些数据(以上ROWID对应),然后又添加了新数据,新数据会利用没有使用的ROWID 这样第一步的用户记录的ROWID就是新数据的,就会出错1.谁能深入解释解释这种现象?50分
2.如何避免以上现象?75分
3。ROWID如何才能始终不重复产生?752,3 解决其它贴子给分
第一步:客户端检索数据时记录的对应的ROWID,然后检索游标断开
第二步:客户端利用记录的ROWID删除对应的数据,会不会删除错误的数据?在多用户时,其他用户删除了这些数据(以上ROWID对应),然后又添加了新数据,新数据会利用没有使用的ROWID 这样第一步的用户记录的ROWID就是新数据的,就会出错1.谁能深入解释解释这种现象?50分
2.如何避免以上现象?75分
3。ROWID如何才能始终不重复产生?752,3 解决其它贴子给分
跟事务已经没有关系了,客户端记录的是短块后的RowID如果使用序列,是加一个字段,然后用触发器读取序列实现自动增加吗?
有没有其他好办法?如果这样? ROWID岂不是成了废物没有什么用处?
create sequence SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 61
increment by 1
cache 30
order;使用:insert into tname values(序列名.nextval)从来没见过哪个系统会去用ROWID来当自己的主键的....我的对ROWID的理解是建立索引是基于ROWID来寻找数据的,ROWID记录数据的物理位置。
我可能不明白你的意思,能详细说一说
既然ROWID记录数据的物理位置,那么说没有实际的应用意义
rowid只是位置,又不是主键
第二步:客户端利用记录的ROWID删除对应的数据,会不会删除错误的数据?
1.会,如果你增加或者删除了数据,就会
2.ROWID和select的内容相关,如果你select出相同的内容,rowid的顺序就可能相同
2.1但是就算相同的表,如果select的条件不同,rowid定位的数据就可能不同。
2.2就算slelect条件相同,如果select选出的结果不同(比如删除或者增加的数据),rowid定位的数据也可能不同。
在多用户时,其他用户删除了这些数据(以上ROWID对应),然后又添加了新数据,新数据会利用没有使用的ROWID 这样第一步的用户记录的ROWID就是新数据的,就会出错
见回答2.21.谁能深入解释解释这种现象?50分
2.如何避免以上现象?75分
1.在不是一个事务中,不要采取ROWID的方式
2.在一个事务中,采用表锁(table lock)
3。ROWID如何才能始终不重复产生?75
1.ORACLE自己产生的,不是重复产生,而是对表的行作了索引
你甚至可以自己控制ROWID
例如,在分页的时候,我们经常用ROWID控制,但是ORDER BY对ROWID无效,
我们一般把ORADLE BY的结果作为SELECT的表,就可以得到我们想要的
SELECT * FORM
(SELECT * FROM AAA WHERE xxx ORDER BY yyy) A [我们自己控制了A的ROWID]
WHERE zzz
见,最后的回答
例如,在分页的时候,我们经常用ROWID控制,但是ORDER BY对ROWID无效,
我们一般把ORADLE BY的结果作为SELECT的表,就可以得到我们想要的
SELECT * FORM
(SELECT * FROM AAA WHERE xxx ORDER BY yyy) A [我们自己控制了A的ROWID]
WHERE zzz