本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
身分資料欄
重要
使用身分資料欄時,應仔細考慮快取值。如需詳細資訊,請參閱 CREATE SEQUENCE 頁面上的重要標註。
如需如何根據工作負載模式最佳使用身分資料欄的指引,請參閱 使用序列和身分資料欄。
身分資料欄是從隱含序列自動產生的特殊資料欄。它可用於產生索引鍵值。若要建立身分資料欄,請使用 中的 GENERATED ... AS IDENTITY子句CREATE TABLE,例如:
CREATE TABLE people ( id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000), ... );
或者:
CREATE TABLE people ( id bigint GENERATED BY DEFAULT AS IDENTITY (CACHE 70000), ... );
如需詳細資訊,請參閱CREATE TABLE。
如果在具有身分資料欄的資料表上執行 INSERT命令,且身分資料欄未明確指定任何值,則會插入隱含序列產生的值。例如,使用上述定義並假設其他適當的資料欄,撰寫:
INSERT INTO people (name, address) VALUES ('A', 'foo'); INSERT INTO people (name, address) VALUES ('B', 'bar');
會從 1 開始產生資料id欄的值,並產生下列資料表資料:
id | name | address ----+------+--------- 1 | A | foo 2 | B | bar
或者,DEFAULT可以指定關鍵字來取代值,以明確請求序列產生的值:
INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');
同樣地, 關鍵字DEFAULT可用於 UPDATE 命令。
因此,在許多方面,身分資料欄的行為就像具有預設值的資料欄。
資料欄定義BY DEFAULT中的 子句 ALWAYS和 會決定在 INSERT和 UPDATE命令中明確處理使用者指定值的方式。在 INSERT命令中,如果選取 ALWAYS ,則只有在INSERT陳述式指定 時,才會接受使用者指定的值OVERRIDING SYSTEM VALUE。如果選取 BY DEFAULT ,則使用者指定的值優先。因此,使用 BY DEFAULT 會產生與預設值更相似的行為,其中預設值可以被明確值覆寫,而 ALWAYS 提供更多保護,防止意外插入明確值。
身分資料欄的資料類型必須是序列支援的其中一種資料類型。(請參閱 CREATE SEQUENCE)。建立身分資料欄 (請參閱 CREATE TABLE) 時或稍後變更 (請參閱 ) 時,可能會指定相關序列的屬性ALTER TABLE。
身分資料欄會自動標記為 NOT NULL。不過,身分資料欄並不保證唯一性。(序列通常會傳回唯一值,但序列可以重設,也可以手動將值插入身分資料欄,如先前所述。) 必須使用 PRIMARY KEY或 UNIQUE 限制條件強制執行唯一性。