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 @   zhjh256  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2022-05-16 PostgreSQL 14.3、13.7、12.11、11.16 和 10.21 发布
2016-05-16 原百万访问量博客http://blog.chinaunix.net/uid/20656672.html不再维护(10年前数百篇oracle/teradata性能优化、故障处理案例)
2016-05-16 p7-p8面试经验总结--拿到offer
点击右上角即可分享
微信分享提示