lightdb mysql 8.0兼容之不可见主键

  数据库设计通常需要满足一定的范式要求,其中主键更是最基本的要求。不过,数据库管理系统却允许我们创建没有主键的表。这样的表在数据库中会带来查询性能低下、复制延迟甚至无法实现高可用配置等问题。

  为此,lightdb在22.1版本引入了一个新的功能,叫做不可见主键(Generated Invisible Primary Keys),它可以自动为没有显式指定主键的表创建一个不可见的主键。其用法是建表时指定WITH PRIMARY KEY语法,表示创建一个表,含有ltapk自增主键。如下:

-- 建表指定自增主键
postgres@postgres=# create table t1(a int) with primary key;
CREATE TABLE
-- 查询表t1, ltapk列为隐藏列
postgres@postgres=# select * from t1;
 a 
---
(0 rows)
-- 插入数据
postgres@postgres=# insert into t1 values(1);
INSERT 0 1
postgres@postgres=# insert into t1 values(2);
INSERT 0 1
postgres@postgres=# select * from t1;
 a 
---
 1
 2
(2 rows)
-- 显示指定ltapk列
postgres@postgres=# select a,ltapk from t1;
 a | ltapk 
---+-------
 1 |     1
 2 |     2
(2 rows)

ltapk字段在select *,insert into t values()等未明确指定字段的增删改查中是不可见的,所以现有系统增加不可见隐藏字段完全无侵入。但是能解决基于主键批量同步或者复制时无法唯一标识记录问题。

mysql 8.0也有一个对应的特性,通过参数sql_generate_invisible_primary_key控制,详见https://blog.itpub.net/70027826/viewspace-3010838/。
注:在做这个功能时,其实我们并不是针对兼容mysql去的,那会儿还没有专门去看mysql有没有这个特性,是因为我们有客户基于id变更复制的需求。
详见:https://www.light-pg.com/docs/lightdb-cn/current/sql-createtable.html
其他实用特性还包括,不可见自动更新时间戳。with update current_tiemstamp
posted @ 2024-05-16 15:24  zhjh256  阅读(7)  评论(0编辑  收藏  举报