用_tidb_rowid 创建虚拟列 报错,Unknown column '_tidb_rowid'

由于开发规范需求,需要新增一个技术主键/唯一键, 对于大表,想尽可能不停业。想通过虚拟列方式,但是报错, 能解决吗:

MySQL [test]> alter table customer2 ADD COLUMN rand_carchar varchar(100) GENERATED ALWAYS AS (_tidb_rowid);
ERROR 1054 (42S22): Unknown column ‘_tidb_rowid’ in ‘generated column function’

在 TiDB 中,_tidb_rowid 是一个特殊的隐藏列,用于在内部标识每行数据。然而,直接在 ALTER TABLE 语句中使用 _tidb_rowid 作为生成列(Generated Column)的表达式可能会遇到问题,因为 _tidb_rowid 通常不被设计为直接暴露给用户进行此类操作。

没有这种用法吧

select _tidb_rowid from customer2 看看能查到吗

是因为TiDB不支持使用 _tidb_rowid作为生成列的表达式。TiDB的生成列功能与MySQL略有不同,它不提供直接的内置变量来引用行ID

1 个赞

创建虚拟列是什么需求

隐藏列_tidb_rowid无法作为表结构的吧。需要唯一主键的需求,是不是因为需要往下游同步呢,虚拟列对同步有影响的。

_tidb_rowid是隐藏的,不能针对他创建虚拟列

这种新特性也敢于尝试么,哈哈