南大通用GBase8s 常用SQL语句(六十八)
- 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 关键字,则当指定名称的表已经存在于当前数据库中时,数据库不采取操作(而非向应用程序发送异常)。