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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享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