CREATE TABLE 语句

使用 CREATE TABLE 语句在当前数据库中创建新的永久表。

可以使用 CREATE TABLE 语句来创建关系数据库表或类型表(对象关系型表)。有关创建临时表的信息,请参阅 CREATE TEMP TABLE 语句 。有关如何创建不存储在数据库中的外部表对象的信息,请参阅 CREATE EXTERNAL TABLE 语句

语法

表定义
WITH 选项
元素 描述 限制 语法
table 在这里为新的表声明的名称 在数据库中的表、视图、和序列的名称中必须是唯一的 标识符

用法

当您创建表时,必须声明它的名称,定义它的结构和它的日志记录状态。可以如随后的章节所标识的那样可选地指定其他属性。该语法图显示了需要的或可选的规范的序列。CREATE TABLE 语句的语法段,和一些它们的组件都标识在一下的五个列表中。

下列关键字和子句定义新的列的属性:
表 1. 定义列的名称、数据类型、缺省值和安全标签
规范 主题 该关键字或子句定义的内容
列定义 列定义 列的名称和属性,包括数据类型、约束、缺省值
DEFAULT DEFAULT 子句 列的缺省值
COLUMN SECURED WITH 列定义 受保护的表的 LBAC 标签
以下关键字和子句在新表上定义约束:
表 2. 在表的一列或多列上定义约束
规范 主题 该关键字或子句定义的内容
单列约束 单列约束格式 单列上的数据库完整性约束、参照完整性约束或其它约束
约束定义 约束定义 表上约束的名称、属性和启用或禁用的状态
NULL 使用 NULL 约束 列允许 NULL 值
NOT NULL 使用 NOT NULL 约束 列不允许 NULL 值
UNIQUE or DISTINCT 使用 UNIQUE 或 DISTINCT 约束 列不允许重复的值
CHECK CHECK 子句 检查其它列的约束
PRIMARY KEY 使用 PRIMARY KEY 约束 表中的每一行包含一个非 NULL 的唯一值
FOREIGN KEY 使用 FOREIGN KEY 约束 建立表之间的依赖
REFERENCES REFERENCES 子句 与其它列的参照完整性约束
多列约束 多列约束格式 列集合上的数据完整性约束
下列关键字和子句定义了该表的影子列和行级别审计支持:
表 3. 定义影子列和行级别审计支持
规范 主题 该关键字或子句定义的内容
WITH keyword Options 子句 影子列或行级别审计支持的关键字选项
WITH AUDIT 使用 WITH AUDIT 子句 行级别审计支持
WITH CRCOLS 使用 WITH CRCOLS 选项 影子列或行级别审计支持的关键字选项
WITH ERKEY 使用 WITH ERKEY 关键字 Enterprise Replication 定义主键的 3 个影子列
WITH REPLCHECK 使用 WITH REPLCHECK 关键字 在完整性检查中使用的影子列
WITH ROWIDS 使用 WITH ROWIDS 选项 已分片表中的隐藏列(不推荐使用)
WITH VERCOLS 使用 WITH VERCOLS 选项 辅助服务器上用于 UPDATE 操作的 2 个影子列
下列关键字和子句定义新表的存储选项:
表 4. 定义新表或其智能大对象列的存储
规范 主题 该关键字或子句定义的内容
Storage Options 存储选项 表物理存储位置和有关表如何存储的其它信息
IN dbspace, sbspace, blobspace, or extspace 使用 IN 子句 拥有新表(或表的一部分、或大对象)的存储对象
FRAGMENT BY or PARTITION BY FRAGMENT BY 子句 分片表的分布存储方案
BY ROUND ROBIN 通过 ROUND ROBIN 分片 存储表分片的 dbspace 列表
BY EXPRESSION 表达式分片子句 基于表达式的分片分布
BY LIST 列表分片子句 基于列表的分片分布
BY RANGE . . . INTERVAL Interval fragment 子句 基于 RANGE INTERVAL 的分片分布
PUT 子句 PUT 子句 BLOB 或 CLOB 列的存储位置、extent 大小以及其它 sbspace 属性
EXTENT SIZE EXTENT SIZE 选项 表的第一个和后续的存储 extent 的大小
COMPRESSED 表的 COMPRESSED 选项 大量的行数据是否启用自动压缩
下列关键字和子句定义日志记录方式和其它表属性,或者向新表中插入指定查询返回的符合条件的行。
表 5. 日志记录选项、锁定粒度、访问方法、类型表属性、数据分布统计选项、插入来自查询结果的数据或表的 LBAC 安全策略。
规范 主题 该关键字或子句定义的内容
日志记录选项 (STANDARD 或 RAW) 日志记录选项 新表的日志记录特征
LOCK MODE (PAGE ROW) LOCK MODE 选项 新表的锁定粒度
USING Access-Method USING 存取方法子句 如何访问新表
OF TYPE OF TYPE 子句 在关系对象型数据库中新类型表的已命名 ROW 类型
UNDER 使用 UNDER 子句 在类型表层次结构中新子表的超表
SECURITY POLICY SECURITY POLICY 子句 表的基于标签的访问控制策略
STATCHANGE, STATLEVEL CREATE TABLE 语句的 Statistics 选项 更改数据分布统计信息的粒度和域
AS SELECT AS SELECT 子句 创建并填充查询结果表

表名称和列名称的唯一性规则

当您创建新表是,每个列必须有与之相关的数据类型。列的名称在同一表的列的名称中必须是唯一的。( OF TYPE 选项指定现有已命名 ROW 类型,其字段为您正在创建的类型表提供列名称和列的数据类型。)

如果数据库没有被创建为 MODE ANSI ,则名称必须在相同的数据库中的表、视图、序列和同义词的名称中是唯一的。

在兼容 ANSI 的数据库中,组合 owner.table 必须在在相同的数据库中的表、同义词、视图、和序列对象的名称中是唯一的。具有不同所有者名称的表对象可以具有相同的标识符。

如果您包含了可选的 IF NOT EXISTS 关键字,则当指定名称的表已经存在于当前数据库中时,数据库不采取操作(而非向应用程序发送异常)。

CREATE TABLE 的其它语法说明

对于在新的永久性表中存储一个查询的结果集的 CREATE TABLE 语句的受限制的语法选项,请参阅 AS SELECT 子句

DB-Access 中,如果使用 -ansi 标识或设置 DBANSIWARN 环境变量,那么当您在 CREATE SCHEMA 语句外使用 CREATE TABLE 时将会生成警告。

1 请参阅 列定义
2 请参阅 多列约束格式
3 GBase 8s 扩展
4 请参阅 OF TYPE 子句
5 请参阅 Options 子句
6 请参阅 存储选项
7 请参阅 LOCK MODE 选项
8 请参阅 USING 存取方法子句
9 请参阅 SECURITY POLICY 子句
10 请参阅 CREATE TABLE 语句的 Statistics 选项