更新时间:2023-03-17 GMT+08:00

概述

本节介绍如何创建普通表。

表是由数据库管理员维护的逻辑结构,由行和列组成。可以从数据角度,将表定义为数据定义的一部分。定义表之前,需首先定义数据库和模式,本节将介绍如何利用Data Studio创建表。执行如下步骤在数据库中定义表:

  1. 在“对象浏览器”窗格中,右键单击“普通表”,选择“创建普通表”。
  2. 定义基本表信息,如表名称、表类型等。详情请参见提供基本信息
  3. 定义列相关信息,如列名、数据类型模式、数据类型、列约束等。详情请参见定义列
  4. 选择表数据分布信息详情请参见选择数据分布类型需修改
  5. 为不同约束类型定义列约束。约束类型包含主键(PRIMARY KEY)、唯一(UNIQUE)、检查(CHECK)。详情请参见定义表约束
  6. 定义表索引信息,如索引名称、访问方法等。详情请参见定义索引

    在“SQL预览”页签,可以查看输入所自动生成的SQL查询。详情请参见SQL预览

提供基本信息

在模式中创建表时,当前模式将作为待创建表的模式。创建过程中,需要执行如下若干步骤。创建普通表时,需提供以下信息:

  1. 填写“表名”。“表名”指定要创建的表名称。

    选择“区分大小写”复选框可保存“表名”字段中输入的文本的大小写。例如,如果输入的表名称“Employee”,则表名将创建为“Employee”。

    创建表的模式名称显示在“用户模式”中。

  2. 从“表存储方式”中选择表存储方式。
  3. 选择“表类型”。“表类型”指定表类型。

    • 正常”:如指定为“正常”,则创建一个标准的表。
    • 非正常”:如指定为“非正常”,则创建一个无日志表。对无日志表写入数据时,将不记录到日志中,这样使无日志表的写入速度大大超过一般表的速度。尽管如此,无日志表也是不安全的:在冲突或异常关闭后,无日志表会被自动截断;另外,无日志表的内容不会被备份到备机,并且,创建无日志表的索引时,也不会自动录入日志。

  4. 选择选项:

    • 如不存在相同名称的表,勾选“如果不存在”,创建该表。
    • 勾选“带OIDS”,为新创建的表分配OID(对象标识符)。创建需要带OID的新表时,请选择该选项。
    • 选择“填充因子”表填充因子取值范围为10~100。默认值为100,表示完全填充。

    填充因子”指定为较小值时,“INSERT”操作仅填充表页面到指定的百分比。表页面预留的剩余空间,将用于更新该页面的行。这样使得“UPDATE”操作可以在和原页面相同的页面上,放置更新后的行内容,比放置在不同的页面上更加高效。对于从未更新过表项的表来说,完全填充是最好的选择。但是对于更新规模较大的表,较小填充因子更加合适。TOAST表不支持设置该参数。

  5. 在“设置表描述”框中填写表的简短描述。
  6. 提供完这些通用信息后,单击“下一步”定义表的列信息。

下表列出了“一般”中普通表支持的字段。

表1 支持的字段

字段

行存表

列存表

ORC表

表类型

x

如果不存在

带OIDS

x

x

填充因子

x

x

定义列

列定义了行中的信息单元,每一行为一个表项,每一列为应用于所有行的信息的分类。数据库添加表时,可以定义组成该数据库的列,列决定了表可以包含的数据类型。提供表的通用信息后,单击“”页签定义列清单,每一列包含名称、数据类型和其他可选属性。

仅可在普通表中的已有列上进行如下操作:

执行以下步骤定义表的列:

  1. 在“列名”区域填写列名称。“列名”指新表中待创建的列的名称,列名在表中唯一。

    勾选“区分大小写”复选框可保留“列名”字段中输入的文本的大小写。例如,如果输入的表名称为“Name”,则表名将创建为“Name”。

  2. 选择“阵列维度”。“阵列维度”指列的阵列尺寸。

    例如:如果某列的数组维度定义为integer [],该列数据会添加为单维数组。

    上表的marks列创建为单维数据,subject列创建为二维数据。

  3. 从“数据类型”中选择列的数据类型。例如,为整数值选择“bigint”。

    对于复杂的数据类型:

    • 从“模式数据类型”中选择模式。
    • 从“数据类型”中选择对应的数据类型。该列表显示所选模式的表和视图。

      用户无法选择自定义数据类型。

  4. 在“精度/大小”字段选择所输入数据的类型。仅当数据类型可以用精度/尺寸来定义时,该选项可选。
  5. 在“范围”字段选择输入的数据类型的范围。
  6. 根据需要在“列约束”区域选择如下约束:

    • 非空”:指该列不能包含空值。
    • 唯一”:指列可能仅包含唯一值。
    • 默认”:指定该列未定义值的情况下使用的默认值。
    • 检查”:指生成boolean结果的表达式,该结果中,新增行或更新行的操作需成功执行。

  7. 如果要在“创建普通表”对话框的“”页签添加列注释信息,则在“设置列描述(最多5000个字符)”文本框中进行输入,之后单击“添加”。此外,也支持通过单独的新增列窗口添加注释信息。完成之后,可以在普通表的属性窗口中查看该信息。
  8. 输入新增列的所有信息后,单击“添加”按钮也可以从清单中删除列或修改列顺序,定义完所有列后,单击“下一步”。

下表列出了“”中普通表支持的字段。

表2 支持的字段

字段

行存表

列存表

ORC表

阵列维度

x

x

模式数据类型

x

x

非空

默认

唯一

x

x

检查

x

x

移除列

执行以下步骤移除列:

  1. 选择要移除的列。
  2. 单击“删除”。

编辑列

执行以下步骤编辑列:

  1. 选择要编辑的列。
  2. 单击“编辑”。
  3. 编辑列的详细信息,单击“更新”保存更改。

    开始编辑列后,必须完成并保存更改才能进行其他操作。

移动列

可移动表格中列的位置。要移动某列,选中该列后单击“向上”或“向下”。

选择数据分布类型需修改

数据分布是指如何分布一个表或如何在多个数据节点间复制一个表。

分布类型如下表所示:

分布类型

说明

默认分布

分配默认分布类型。

REPLICATION

每一行复制到数据库集群的所有数据节点。

HASH

根据指定列的哈希值分布行。

RANGE

根据range值分布行。

LIST

根据list值分布行。

选择数据分布后,单击“下一步”。

下表列出了“数据分布”中普通表支持的选项。

表3 分布类型

分布类型

行存表

列存表

ORC表

默认分布

x

HASH

REPLICATION

x

定义表约束

创建约束为可选操作一个表有一个(且只能有一个)主键,建议创建主键。

在“约束类型”中可选择如下选项:

主键

主键是行的唯一标识,包含一列或者多个列。

一个表只可指定一个主键,作为列约束或表约束主键约束应命名一组列,该组列不同于同一表定义的任何唯一约定命名的其他组的列。

在“约束类型”中选择“PRIMARY KEY”,然后填写“约束名”。在“可用列”清单中选择列,单击“添加”。如需多列主键,为其他列重复执行该步骤。

表的“填充因子”取值范围为10~100。默认值为100,表示完全填充。“填充因子”指定为较小值时,“INSERT”操作仅填充表页面到指定的百分比。表页面预留的剩余空间,将用于更新该页面的行。这样使得“UPDATE”操作可以在和原页面相同的页面上,放置更新后的行内容,比放置在不同的页面上更加高效。对于从未更新过表项的表来说,完全填充是最好的选择。但是对于更新规模较大的表,较小填充因子更加合适。TOAST表不支持设置该参数。

延迟”:勾选该复选框延迟该选项。

初始化延迟”:勾选该复选框,在设置的默认时间点检查约束。

然后,在“约束”区域框单击“添加”。

可单击“删除”,删除“约束”中的主键。

各域的必选参数用星号(*)标识。

唯一

在“约束类型”中选择“UNIQUE”,然后填写“约束名”。

在“可用列”清单中选择列,单击“添加”。如需多列“UNIQUE”,为其他列重复执行该步骤添加第一列后,“UNIQUE”名自动从表名填入该名称支持修改。

填充因子”:详情请参见主键小节。

延迟”:详情请参见主键小节。

初始化延迟”:详情请参见主键小节。

可单击“删除”删除“约束”中的“UNIQUE”。

各域的必选参数用星号标识。

检查

在“约束类型”中选择“CHECK”,然后填写“约束名”。

执行“INSERT”或者“UPDATE”操作,如果检查表达式错误,表数据不可更改。

双击“可用列”清单中的列,则“检查表达式”编辑行插入到当前光标位置。

然后,在“约束”区域框单击“添加”。也可单击“删除”,删除“约束”中的“CHECK”。各域的必选参数用星号标识。定义完所有列后,单击“下一步”。

下表列出了“表约束”中普通表支持的选项。

表4 约束类型

约束类型

行存表

列存表

ORC表

CHECK

x

x

UNIQUE

x

x

PRIMARY KEY

x

x

定义索引

创建索引为可选操作。索引主要用于增强数据库性能。该操作建立指定表中指定列的索引,如需创建“唯一索引”,勾选该复选框。

在“访问方式”中选择要使用的索引方法名称。默认方法是B-tree。

索引的“填充因子”指索引方法填充索引页面的百分比。“访问方式”为B-trees时,初次建立索引以及在右侧扩展索引(填写新的最大键值)时,叶子页面填充到该百分比如果后续完全填满,页面将拆分,这样会导致索引效率逐步衰减。B-trees使用默认填充因子90,也可以选择10~100范围内的整数。如果为静态表,填充因子100,这样可以尽量减小索引的物理尺寸。对于更新量较大的表,推荐填充因子设置为较小值,这样可以尽量减少页面拆分的需求。其他索引方法使用的填充因子不同,但是比较类似。默认的填充因子随方法不同而不同。

可以直接提到索引的用户定义的表达式,也可以使用“可用列”创建索引在“可用列”列表中选择列,单击“添加”。如需多列索引,为其他列重复执行该步骤。

输入新增索引的所有信息后,单击“添加”按钮。

可单击“删除”删除清单中的索引定义完所有列后,单击“下一步”。

下表列出了“索引”中普通表所支持的字段/选项。

表5 支持的字段/选项

字段/选项

行存表

列存表

ORC表

唯一索引

x

x

btree

x

gin

x

gist

x

hash

x

psort

x

spgist

x

填充因子

x

x

用户自定义表达式

x

x

部分索引

x

x

SQL预览

Data Studio按照“创建普通表”向导中输入的内容,生成一个DDL语句。

可以查看、选择、复制该查询,但是无法编辑。

  • 要选择查询,按“Ctrl+A”,或单击右键,选择“全选”。
  • 要复制所选查询,按“Ctrl+C”,或单击右键,选择“复制”。

单击“完成”创建表。单击“完成”后,生成的查询将被发送到服务器。错误会显示在对话框和状态栏中。