oracle中的rowid使用及說(shuō)明
oracle中的rowid
oracle數(shù)據(jù)庫(kù)的表中的每一行數(shù)據(jù)都有一個(gè)唯一的標(biāo)識(shí)符,或者稱為rowid,在oracle內(nèi)部通常就是使用它來(lái)訪問(wèn)數(shù)據(jù)的。
rowid需要 10個(gè)字節(jié)的存儲(chǔ)空間,并用18個(gè)字符來(lái)顯示。
該值表明了該行在oracle數(shù)據(jù)庫(kù)中的物理具體位置。可以在一個(gè)查詢中使用rowid來(lái)表明查詢結(jié)果中包含該值。
AAAR1yAAHAAAAFkAAA為例
這里的AAAR1y是數(shù)據(jù)庫(kù)對(duì)象編號(hào),AAH是文件標(biāo)號(hào),AAAAFk是塊編號(hào),最后三位AAA是行編號(hào)。
使用select * from DEPT;
輸出結(jié)果中是不能看到rowid這里一列的,這是因?yàn)檫@一列只在數(shù)據(jù)庫(kù)內(nèi)部使用,rowid通常被稱為一個(gè)偽列。
如果想選擇
scott.emp的數(shù)據(jù)后進(jìn)行手工修改,則必須使
select rowid,t.* from scott.emp t;
而不能直接寫成
select * from emp; select rowid,t.* from scott.emp t; select * from scott.emp for update;
在ORACLE中用ROWID來(lái)定位記錄是最快的,比索引還快,所以如果先用SELECT ROWID選出要更新的行,放入COLLECTION中,再用 FORALL UPDATE 來(lái)批量更新可以提高速度。從這點(diǎn)來(lái)講是比其他方法好一點(diǎn)
SELECT FOR UPDATE在更新前會(huì)鎖定記錄,這在復(fù)雜的并行查詢更新程序中是必要的,比如要求數(shù)據(jù)一致性,在過(guò)濾數(shù)據(jù)時(shí)不允許他人改動(dòng)數(shù)據(jù),會(huì)用FOR UPDATE或SET TRANSACTION READ ONLY來(lái)加鎖。
另外像 CURSOR里的WHERE CURRENT OF CURSOR語(yǔ)句要求SELECT中必須加FOR UPDATE.
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle 解決ORA-00257 Archiver error 報(bào)錯(cuò)問(wèn)題解決
訂單投資交易環(huán)境進(jìn)行 impdb 數(shù)據(jù)泵恢復(fù)數(shù)據(jù),執(zhí)行到一半,報(bào)錯(cuò)終止,歸檔策略保留時(shí)間較長(zhǎng),或歸檔頻率過(guò)高,導(dǎo)致數(shù)據(jù)庫(kù)掛載盤符空間不足,本文給大家分享Oracle 解決ORA-00257 Archiver error 報(bào)錯(cuò)問(wèn)題解決,感興趣的朋友一起看看吧2023-12-12Oracle數(shù)據(jù)庫(kù)把多行轉(zhuǎn)一列逗號(hào)分割兩種方法
Oracle將行轉(zhuǎn)換為列是指將關(guān)系型數(shù)據(jù)庫(kù)中的行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)的操作,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)把多行轉(zhuǎn)一列逗號(hào)分割兩種方法的相關(guān)資料,需要的朋友可以參考下2024-07-07oracle查看字符集后修改oracle服務(wù)端和客戶端字符集的步驟
本文介紹了oracle server端查詢字符集后,修改oracle服務(wù)端和客戶端字符集的步驟,大家參考使用吧2014-01-01Oracle 11g2的監(jiān)聽(tīng)器配置教程
Oracle的監(jiān)聽(tīng)器服務(wù)注冊(cè)方式有兩種,分別為動(dòng)態(tài)和靜態(tài),本文將詳細(xì)介紹這兩種,需要的朋友可以參考下2012-11-11