[保姆教程] [Postgres] 1分鐘深入瞭解Postgres主鍵自增

IMTIY發表於2020-12-15

簡介

用最簡單的教程,抓住最重要的點。本章教程將帶你認識Postgres的自增的用法,以及自增的原理。

本章節中會使用Navicat工具對Postgre的資料庫進行操作,如果你能按照教程操作,這將會幫助你加深印象。


初遇自增

顧名思義,就是自動增加,最終產生的結果會生成一組有序的值,也稱作序列值。

實際,我們僅僅需要兩步操作即可為一個欄位新增自增屬性,第一步,宣告自增變數,第二步引用自增變數。

宣告自增變數

首先,我們使用下面的SQL命令建立一個自增變數,語法如下:

--auto 是自定義變數的名稱,你可以使用任意名稱
CREATE SEQUENCE "public"."auto"
 INCREMENT 1                        --自增的步長(每一次增加多少)
 MINVALUE 1                         --屬性的最小值
 MAXVALUE 9223372036854775807       --屬性的最大值
 START 1                            --初始的值
 CACHE 1;                           --快取值的數量,預設值為1,表示每次只產生1個新的值

引用自增變數

其次,將該函式賦值給欄位的預設值,這樣我們就完成了自增欄位的設定

nextval('auto'::regclass)

例項操作

1.    2.

3.    4.

至此為止,自增屬性就設定完成了。


深入瞭解

  1. 大家經常提到主鍵自增,但其實自增和主鍵並沒有關係,非主鍵也可以自增,自增是一種獲取預設值的途徑之一。

    • 還有很多種其他的途徑,如:隨機值,固定值,特定值等

  2. 自增變數是資料庫中的全域性變數,全域性唯一,多表共享。

    1. 全域性唯一意味著每個資料庫例項只能建立一個名為N的自增變數,重複建立會報錯。

    2. 多表共享,即每個表的每個欄位都有許可權訪問這個自增變數,表和自增變數是一種引用關係,表依引用並且賴自增變數。

    3. 自增變數不依賴任何表,即使資料庫中沒有任何表,你依然可以建立,檢視,修改或刪除自增變數

  3. 不同表之間引用同一個自增變數,得到的序列值按照表資料的新增順序分配序序列值

  4. 同一張表不同欄位引用同一個自增變數,得到的序列值按照欄位順序從左到右分配序列值

    1. 如果一次性插入多條資料,那麼就是先從左到右,再從上到下分配序列值

  5. 不同的資料庫之間自增變數不共享,且互不干擾

  6. 當資料庫中仍有欄位引用自增變數時,該自增變數無法刪除

    1. 需要將欄位預設值設定引用刪除,才可以刪除自增變數


擴充套件知識

  • 獲取當前自增變數的值
SELECT currval('auto')
  • 設定當前自增變數的值
SELECT setval('"public"."auto"', 1, false);
  • 更新到下個序列值
SELECT nextval('auto');
  • 刪除序列值
DROP SEQUENCE "public"."auto";

總結

自增自增是個啥,其實只是個變數哈,這個變數跟庫混,而且庫裡只有它

你要建立別建立倆,兩個一起老打架,刪除之前要記得,預設值得清空了

看著命令還挺多,能用上的也就兩三個,全會了,更賺.......

相關文章