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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章