CREATE TABLE
CREATE TABLE 定义一个新表。
CREATE TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ] ) where column_constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression )| DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) STORED | GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( sequence_options ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters | PRIMARY KEY index_parameters | and table_constraint is: [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | and like_option is: { INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL } index_parameters in UNIQUE, and PRIMARY KEY constraints are: [ INCLUDE ( column_name [, ... ] ) ]
标识列
注意
使用标识列时,应谨慎考虑缓存值。有关更多信息,请参阅 CREATE SEQUENCE 页面上的“重要提示”标注。
有关如何根据工作负载模式以最佳方式使用标识列的指导,请参阅使用序列和标识列。
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY ( 子句将列创建为标识列。它将附加一个隐式序列,在新插入的行中,该列将自动具有序列中分配给它的值。这样的列隐式为 sequence_options )NOT NULL。
子句 ALWAYS 和 BY DEFAULT 决定了在 INSERT 和 UPDATE 命令中如何显式处理用户指定的值。
在 INSERT 命令中,如果选择了 ALWAYS,则只有在 INSERT 语句指定 OVERRIDING SYSTEM
VALUE 时才接受用户指定的值。如果选择了 BY DEFAULT,则优先使用用户指定的值。
在 UPDATE 命令中,如果选择 ALWAYS,则将列更新为除 DEFAULT 以外的任何值都将遭到拒绝。如果选择 BY
DEFAULT,则可以正常更新该列。(UPDATE 命令没有 OVERRIDING 子句。)
sequence_options 子句可用于覆盖序列的参数。可用的选项包括为 CREATE SEQUENCE 显示的选项,另加 SEQUENCE NAME
。如果没有 nameSEQUENCE NAME,则系统会为序列选择一个未使用的名称。