sql中的唯一编号,在ORACLE中大约相当于sequenceORACLE把ROWID作为B-树和其内部算法标示ROW的唯一标示。
在ORACLE8以前的版本中,ROWID标示FILE、BLOCK、ROW NUMBER,只用一个数字代表FILE号。
在ORACLE8中,一个DATAFILE有两个数字代表:
一个绝对值,是整个数据库唯一的。可以看DBA_DATA_FILES中的FILE_ID。
一个相对值,在TABLESPACE中是唯一的,可以看DBA_DATA_FILES中的RELATIVE_
FNO。 新的ROWID使用相对值,所以必须存放SEGMENT的标示,否则就会混淆。所以ORACLE8在ROWID中加入对象的SEGMENT号,
用来标示TABLE或者PARTITION。
在ORACLE8以前的版本中,ROWID标示FILE、BLOCK、ROW NUMBER,只用一个数字代表FILE号。
在ORACLE8中,一个DATAFILE有两个数字代表:
一个绝对值,是整个数据库唯一的。可以看DBA_DATA_FILES中的FILE_ID。
一个相对值,在TABLESPACE中是唯一的,可以看DBA_DATA_FILES中的RELATIVE_
FNO。 新的ROWID使用相对值,所以必须存放SEGMENT的标示,否则就会混淆。所以ORACLE8在ROWID中加入对象的SEGMENT号,
用来标示TABLE或者PARTITION。
[A]8以上版本的ROWID组成
OOOOOOFFFBBBBBBRRR
8以下ROWID组成(也叫受限Rowid)
BBBBBBBB.RRRR.FFFF
其中,O是对象ID,F是文件ID,B是块ID,R是行ID
如果我们查询一个表的ROWID,根据其中块的信息,可以知道该表确切占用了多少个块,进而知道占用了多少数据空间(此数据空间不等于表的分配空间) ROWID不是实际的列,所以不能做主键,看了上面的描述你清楚了
就差不多知道是rowid是怎么一回事了。