RowId是什么 ?
Hummer中的rowid 和oracle 中的rowid 目的近似、实现不同。Rowid的目的都是唯一标示一条记录,而且也都属于伪列。但Oracle中rowid是有数据的物理位置计算获得,而Hummer中的rowid则是由key、时间戳、binlogid(数据落地时将自动加到记录中)组成(也正因此Oracle rowid是定长的,Hummer 中rowid是不定长的)。不过Hummer和 Oracle 中的rowid用法和用途基本相似。
RowId在什么时候使用 ?
对于重复记录(key 和timestamp 都相同)的操作往往需要使用rowid—— 因为虽然记录重复但rowid不会重复,因此如果对重复记录中的给定记录做检索、删除、或更新,就要使用rowid。
如
select rowid,car_card_num,pass_time,speed from tpass2 limit 4
rowid | car_card_num | pass_time | speed |
---|---|---|---|
0001EogO9;HYiel1A39FJ300000000000E== | 京A02QT0 | 1388534441140 | 46 |
0001EogO9;HYiel1A39FJ300000001u4UE== | 京A02QT0 | 1388534441140 | 46 |
0001EogOREnYiel1A3B;B5A0000000000U== | 京A03K4S | 1388534461708 | 59 |
0001EogOREnYiel1A3B;B5A0000001u4UU== | 京A03K4S | 1388534461708 | 59 |
更新操作
updatetpass2 set speed = 100 whererowid='0001EogOREnYiel1A3B;B5A0000001u4UU=='selectrowid,speed fromtpass2 where rowid='0001EogOREnYiel1A3B;B5A0000001u4UU==' 检查记录speed已被修改
rowid | car_card_num | pass_time | speed |
---|---|---|---|
0001EogOREnYiel1A3B;B5A0000001u4UU== | 京A03K4S | 1388534461708 |
100
|
注:rowid 更新不支持更新key和时间戳字段!
删除操作
delete fromtpass2 where rowid='0001EogOREnYiel1A3B;B5A0000001u4UU=='
select * fromtpass2 where rowid='0001EogOREnYiel1A3B;B5A0000001u4UU==' 则记录对应记录被删除
另外hummer 的rowid是时间有序的,即可以使用rowid><等条件,过滤给定rowid对应时间之间或之后的记录集合,如
select car_card_num,speed from tpass2 where rowid<='0001EogOREnYiel1A3B;B5A0000000000U=='
car_card_num
|
pass_time | speed |
---|---|---|
京A02QT0 | 1388534441140 | 46 |
京A02QT0 | 1388534441140 | 46 |
京A03K4S | 1388534461708 | 59 |