數據庫設計通常需要滿足一定的範式要求,其中主鍵更是最基本的要求。不過,數據庫管理系統卻允許我們創建沒有主鍵的表。這樣的表在數據庫中會帶來查詢性能低下、複製延遲甚至無法實現高可用配置等問題。
爲此,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()等未明確指定字段的增刪改查中是不可見的,所以現有系統增加不可見隱藏字段完全無侵入。但是能解決基於主鍵批量同步或者複製時無法唯一標識記錄問題。