PostgreSQL 中的自動遞增值
-
在 PostgreSQL 中使用
SERIAL
關鍵字實現AUTO_INCREMENT
-
使用 PostgreSQL
AUTO_INCREMENT
中的GENERATED { BY DEFAULT || ALWAYS} AS
子句
MySQL 中的 Auto_Increment
是一個自增變數,有助於為表中的資料集提供唯一標識。它最常用於 PRIMARY
鍵中以唯一地索引行。
在 MySQL 中,我們可以將 AUTO INCREMENT
附加到我們想要的任何列。
CREATE TABLE test (
id int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
但是,今天我們將學習如何在 PostgreSQL 中執行此操作。
在 PostgreSQL 中使用 SERIAL
關鍵字實現 AUTO_INCREMENT
讓我們用一個 id
和一個 color
列製作一個表 CAT
。
create table cat(
id SERIAL,
color varchar not null
);
讓我們繼續往裡面插入一些值。
insert into cat (color) values('black'), ('white'), ('brown'), ('tuxedo');
確保指定 COLUMN_NAME
,以便該函式不會選擇所有列並違反 SERIAL
目標。如果你深入研究 PostgreSQL 文件,你將瞭解到:
當你單擊 RUN
時,它將顯示以下結果。
輸出:
因此,你可以看到 SERIAL
方法有效地實現了 AUTO_INCREMENT
。
PostgreSQL 中 SERIAL
及其替代方案的簡要工作
SERIAL
關鍵字生成一個整數列。代替 SERIAL
,你也可以使用 SERIAL4
,代表 4 個位元組。
如果你想要更多識別符號或更大範圍的自動生成值,你還可以使用 BIGSERIAL
或 SERIAL8
,最多可容納 2^31
識別符號。
SERIAL
方法可以替換為以下內容。
create sequence id_col_AI;
create table cat(
id integer DEFAULT nextval('id_col_AI') NOT NULL,
color varchar not null
);
那麼,這裡發生了什麼?SEQUENCE
定義了一個新的數字生成器。如果你想將 START VALUE
更改為你喜歡的值,你可以在宣告的末尾使用 START (your number)
引數。
然後在 ID
列中,將其定義為 DEFAULT
以從列內的生成器中獲取下一個值。DEFAULT
傾向於為該列分配除 NULL
之外的預設值。
然後,你參考建立的 SEQUENCE
並呼叫 NEXTVAL(your seq)
以按順序獲取值。這使得 NOT NULL
可以防止使用者隱式或顯式插入任何 NULL
。
如果你的表已經建立,你也可以嘗試將其擴充套件到 ALTER TABLE
方法。
ALTER table cat ALTER id set DEFAULT nextval('id_col_AI');
使用 PostgreSQL AUTO_INCREMENT
中的 GENERATED { BY DEFAULT || ALWAYS} AS
子句
你也可以使用以下程式碼新增自動遞增列。
id integer generated by default as identity
我們使用 BY DEFAULT
而不是 ALWAYS
,因為前者傾向於寫入使用者值,但後者只允許系統指定的值。你也可以使用 ALWAYS
。
在許多系統中,它可能會完美執行。但是,如果使用 ALWAYS
在插入時返回錯誤,請在 INSERT
子句中附加 OVERRIDING SYSTEM VALUE
以允許使用者特定的值。
insert into cat (color) overriding system value
values('black'), ('white'), ('brown'), ('tuxedo');
這使用了一個自動附加的序列,例如前面提到的隨機生成器。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub