首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库中如何访问隐藏自增列的值
更新时间:2026-05-21 01:56
OceanBase 数据库无主键表会自动使用一个自增列+分区键作为隐藏主键。使用 desc、show create table 等方式是访问不到这个内部隐藏主键的。本文介绍如何访问这个隐藏主键。
适用版本
OceanBase 数据库 V2.x、V3.x 版本。
操作方法
需要创建一个内部用户 __oceanbase_inner_drc_user,然后用这个内部用户去查询内部主键(__pk_increment)。
MySQL 租户下无主键表 t3,普通用户无法访问到内部主键的场景。
创建测试表。
obclient [db_mysql]> create table t3(r1 int); Query OK, 0 rows affected (0.347 sec)插入数据,执行如下语句。
obclient [db_mysql]> insert into t3 values (1),(10000),(300); Query OK, 3 rows affected (0.130 sec) Records: 3 Duplicates: 0 Warnings: 0查询表 t3。
obclient [db_mysql]> select * from t3;输出结果如下。
+-------+ | r1 | +-------+ | 1 | | 10000 | | 300 | +-------+ 3 rows in set (0.036 sec)查询表增量主键。
obclient [db_mysql]> select __pk_increment from t3; ERROR 1054 (42S22): Unknown column '__pk_increment' in 'field list'
MySQL 租户下创建用户内部用户 __oceanbase_inner_drc_user,并使用他来查询内部主键的场景。
创建用户内部用户
__oceanbase_inner_drc。obclient [db_mysql]> create user __oceanbase_inner_drc_user identified by 'root'; Query OK, 0 rows affected (0.073 sec)授权用户内部用户权限。
obclient [db_mysql]> grant select on *.* to __oceanbase_inner_drc_user; Query OK, 0 rows affected (0.063 sec)退出 OBClient 客户端窗口。
obclient [db_mysql]> \q Bye登录 OceanBase 集群。
[root@ob-192-168-2-51 obytt111]# obclient -u__oceanbase_inner_drc_user@mysql#obcluster -h 127.1 -P 2883 -cA -p'root' Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 7 Server version: OceanBase 3.2.3.0 (r20220429172811-141f0018b07e9f8d269bb5f6dbd020cd419eb3fc) (Built Apr 29 2022 17:39:23)使用数据库。
obclient [(none)]> use db_mysql Database changed查询表增量主键。
obclient [db_mysql]> select __pk_increment from t3;输出结果如下:
+----------------+ |__pk_increment | +----------------+ | 1 | | 2 | | 3 | +----------------+ 3 rows in set (0.024 sec)