摘要:在本教程中,您将学习如何使用 GENERATED AS IDENTITY
为表创建 SQL 标识列。
SQL 标识列简介
SQL 标识列是一个在 向表中添加新行 时自动生成值的列。要定义标识列,请使用 GENERATED AS IDENTITY
属性,如下所示
column_name data_type GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY[ ( sequence_option ) ]
Code language: SQL (Structured Query Language) (sql)
在该语法中
data_type
可以是任何整数 数据类型。GENERATED ALWAYS
为标识列生成连续的整数。如果您尝试 插入(或 更新)一个值到GENERATED ALWAYS AS IDENTITY
列中,数据库系统将引发错误。GENERATED BY DEFAULT
为标识列生成连续的整数。ただし、挿入または更新用の値を入力した場合、データベース システムはこの値を自動生成された値の代わりに挿入に使用します。
SQL 标识列示例
A) GENERATED ALWAYS 示例
首先,创建一个名为 ranks
的表,它有 rank_id
列作为标识列
CREATE TABLE ranks (
rank_id INT GENERATED ALWAYS AS IDENTITY,
rank_name CHAR
);
Code language: SQL (Structured Query Language) (sql)
其次,向 ranks
表中插入一行
INSERT INTO ranks (rank_name)
VALUES
('A');
Code language: SQL (Structured Query Language) (sql)
因为 rank_id
列有 GENERATED AS IDENTITY
属性,所以数据库系统为此生成连续的整数,如下面的查询结果所示
SELECT
*
FROM
ranks;
Code language: SQL (Structured Query Language) (sql)

三是为 rank_id
和 rank_name
列提供值,插入新行
INSERT INTO ranks (rank_id, rank_name)
VALUES
(2, 'B');
Code language: SQL (Structured Query Language) (sql)
数据库系统发出以下错误
[Err] ERROR: cannot insert into column "rank_id"
DETAIL: Column "rank_id" is an identity column defined as GENERATED ALWAYS.
Code language: SQL (Structured Query Language) (sql)
如需修复错误,请使用 GENERATED BY DEFAULT AS IDENTITY
。
B) GENERATED BY DEFAULT AS IDENTITY 示例
首先,删除 ranks
表并重新创建。这次我们使用 GENERATED BY DEFAULT AS IDENTITY
属性
DROP TABLE ranks;
CREATE TABLE ranks (
rank_id INT GENERATED BY DEFAULT AS IDENTITY,
rank_name CHAR NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
其次,向 ranks
表中插入一行
INSERT INTO ranks (rank_name)
VALUES
('A');
Code language: SQL (Structured Query Language) (sql)
它按预期的方式工作。
三是为 rank_id
列提供一个值,插入另一行
INSERT INTO ranks (rank_id, rank_name)
VALUES
(2, 'B');
Code language: SQL (Structured Query Language) (sql)

请注意,与使用 GENERATED ALWAYS AS IDENTITY
的前一个示例不同,这个语句也成立。
C) 序列选项示例
对于标识列,您可以使用以下语法指定起始值和增量值
START WITH starting_value
INCREMENT BY increment_value;
Code language: SQL (Structured Query Language) (sql)
请看以下示例
DROP TABLE ranks;
CREATE TABLE ranks (
rank_id INT GENERATED BY DEFAULT AS IDENTITY
(START WITH 10 INCREMENT BY 10),
rank_name CHAR NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
在示例中,rank_id
列的自动生成值以 10 开始,增量值为 10。10。
首先,向 ranks
表中插入一行
INSERT INTO ranks (rank_name)
VALUES
('A');
Code language: SQL (Structured Query Language) (sql)
rank_id
列的起始值为 10,如下所示
SELECT
*
FROM
ranks;
Code language: SQL (Structured Query Language) (sql)

其次,向 ranks
表中插入一行
INSERT INTO ranks (rank_name)
VALUES
('B');
Code language: SQL (Structured Query Language) (sql)
由于增量值选项,第二行的 rank_id
的值为 20。
SELECT
*
FROM
ranks;
Code language: SQL (Structured Query Language) (sql)

在本教程中,您学习了如何使用 GENERATED AS IDENTITY
定义 SQL 标识列。
本教程对您有帮助吗?