概述
本节介绍如何创建表。
表是由数据库管理员维护的逻辑结构,由行和列组成。可以从数据角度,将表定义为 数据定义的一部分。定义表之前,需首先定义数据库和模式,本节将介绍如何利用VDS创建表。执行如下步骤在数据库中定义表:
步骤1: 在“对象浏览器”窗格中,右键单击“普通表”,选择“创建表”。
弹出“创建表”对话框:
SQL Server兼容模式下当数据库版本Vastbase G100为V2.2.17及以上版本时,创建和编辑表时支持在查询数据时忽略大小写的选项。
步骤2: 定义基本表信息,如表名称、表空间、表类型等。详情请参见提供基本信息。
步骤3: 定义列相关信息,如列名、数据类型模式、数据类型、列约束等。详情请参见定义列。
步骤4: 为不同约束类型定义列约束。约束类型包含主键(PRIMARY KEY)、唯一(UNIQUE)、检查(CHECK)、外键(FOREIGN KEY)。详情请参见定义表约束。
步骤5: 定义表分区信息,如分区类型、分区名称、分区列等。详情请参见定义分区。
步骤6: 定义表索引信息,如索引名称、访问方法、表空间等。详情请参见定义索引。在“SQL 预览”页签,可以查看输入所自动生成的 SQL 查询。详情请参见 SQL 预览。
提供基本信息
在模式中创建表时,当前模式将作为待创建表的模式。创建过程中,需要执行如下若干步骤。创建普通表时,需提供以下信息:
步骤1: 填写“表名”。“表名”指定要创建的表名称。选择“区分大小写”复选框可保存“表名”字段中输入的文本的大小写。例如,如果输入的表名称“Employee”,则表名将创建为“Employee”。创建表的模式名称显示在“用户模式”中。
步骤2: 从“表空间”中选择表空间。“表空间”指定创建表的表空间名称。如果未提供表空间名称,将使用表模式的默认表空间。
步骤3: 选择“表类型”。
表类型 | 描述 |
---|---|
普通表 | 创建一个普通表。 |
UNLOGGED | 创建一个无日志表。对无日志表写入数据时,将不记录到日志中,这样使无日志表的写入速度大大超过一般表的速度。尽管如此,无日志表也是不安全的,在冲突或异常关闭后,无日志表会被自动截断; 另外,无日志表的内容不会被备份到备机,并且,创建无日志表的索引时,也不会自动录入日志。 |
分区表 | 指定分区表即可在创建表时直接创建分区。 |
步骤4: 从“表存储方式”中选择表存储方式。包括行存和列存,默认行存。
步骤5: 选择选项:
- 如不存在相同名称的表,勾选“如果不存在”,创建该表。
- 勾选“带 OIDS”,为新创建的表分配 OID(对象标识符)。创建需要带 OID 的新表时,请选择该选项。
- 选择“填充因子”表填充因子取值范围为 10~100。默认值为 100,表示完全填充。
“填充因子”指定为较小值时,“INSERT”操作仅填充表页面到指定的百分比。表页 面预留的剩余空间,将用于更新该页面的行。这样使得“UPDATE”操作可以在和原页面相同的页面上,放置更新后的行内容,比放置在不同的页面上更加高效。对于从 未更新过表项的表来说,完全填充是最好的选择。但是对于更新规模较大的表,较小 填充因子更加合适。TOAST 表不支持设置该参数。
步骤6: 在“设置表描述”框中填写表的简短描述。
步骤7: 提供完这些通用信息后,单击“下一步”定义表的列信息。下表列出了“一般”中普通表支持的字段。
字段 | 行存表 | 列存表 |
---|---|---|
表空间 | 正常 | 正常 |
表类型 | ✔ | ✔ |
如果不存在 | ✔ | ✔ |
带 OIDS | ✔ | ✘ |
填充因子 | ✔ | ✘ |
定义列
列定义了行中的信息单元,每一行为一个表项,每一列为应用于所有行的信息的分类。 数据库添加表时,可以定义组成该数据库的列,列决定了表可以包含的数据类型。提供表的通用信息后,单击“列”页签定义列清单,每一列包含名称、数据类型和其他可选属性。
仅可在普通表中的已有列上进行如下操作:
- 移除列
- 编辑列
执行以下步骤定义表的列:
步骤1: 在“常规配置”区域,点击添加按钮,新增一行列,填写列常规信息。“列名”指新表中待创建的列的名称,列名在表中唯一。勾选“区分大小写”复选框可保留“列名”字段中输入的文本的大小写。例如,如果输入的表名称为“Name”,则表名将创建为“Name”。
步骤2: 从“数据类型”中选择列数据类型。例如,为整数值选“bigint”。
步骤3: 设置列的“长度”和“精度”。仅当所选类型可用长度和精度属性是生效。
步骤4: 选择“阵列维度”。“阵列维度”指列的阵列尺寸。例如:如果某列的数组维度定义为 integer [],该列数据会添加为单维数组。上表的 marks 列创建为单维数据,subject 列创建为二维数据。
步骤5: 根据需要在“列约束”区域选择如下约束:
- “非空”:指该列不能包含空值。
- “唯一”:指列可能仅包含唯一值。
- “默认值”:指定该列未定义值的情况下使用的默认值。
步骤6: 如果需要对该列数据进行脱敏,那么可以选择配置脱敏策略,勾选复选框,设置对应的脱敏方式。
步骤7: 如果要在“创建普通表”对话框的“列”页签添加列注释信息,则在“设置列描述(最多 5000 个字符)”文本框中进行输入,之后单击“添加”。此外,也支持通过单独的新增列窗口添加注释信息。完成之后,可以在普通表的属性窗口中查看该信息。
步骤8: 如果需要给列添加检查约束或配置压缩信息,则在其他配置区域点击添加按钮新增一行列补充信息,通过列名下拉框选择已有列,在检查列输入检查表达式。勾选压缩复选框,设置相应的压缩方式。
步骤9: 如果需要给列配置前导零填充属性,勾选前导零填充选项即可。默认为不可用的复选框,只有当条件满足时才支持配置该选项。使用该选项需满足如下条件。
- 数据库兼容模式为MySQL模式。
- 数据库版本为G100 V2.2 Build 16及以上版本。
- 只有行存表才支持配置该选项。
支持的字段数据类型为:
INT1 INT2 INT4 INT8 INT INTEGER SMALLINT MEDIUMINT BIGINT TINYINT NUMERIC DECIMAL 前导零填充即就是对字段定义ZEROFILL属性,用于修饰整型数据类型,当字段中写入值的长度小于定义长度时,会在数值前面用零补全。
步骤 10: 定义完所有列后,单击“下一步”。下表列出了“列”中普通表支持的字段。
字段 | 行存表 | 列存表 |
---|---|---|
阵列维度 | ✔ | ✘ |
非空 | ✔ | ✔ |
默认 | ✔ | ✔ |
唯一 | ✔ | ✘ |
检查 | ✔ | ✘ |
移除列
执行以下步骤移除列:
步骤 1: 选中表格中要移除的列。
步骤 2: 单击“删除”。
定义表约束
创建约束为可选操作一个表有一个(且只能有一个)主键,建议创建主键。 支持以下约束类型:
主键
主键是行的唯一标识,包含一列或者多个列。
一个表只可指定一个主键,作为列约束或表约束主键约束应命名一组列,该组列不同 于同一表定义的任何唯一约定命名的其他组的列。以下操作步骤可以新增主键:
步骤1: 在“主键”页签中,单击“添加”增加一行主键信息。填写约束名称,为空时数据库将自动生成约束名称。
步骤2: 选择要作为主键约束的列,可选择一列或者多列。
步骤3: 可根据需要选择将要创建与“PRIMARY KEY”约束关联的索引所在的“表空间”。
步骤4: 表的“填充因子”取值范围为 10~100。默认值为 100,表示完全填充。“填充因子” 指定为较小值时,“INSERT”操作仅填充表页面到指定的百分比。表页面预留的剩余 空间,将用于更新该页面的行。这样使得“UPDATE”操作可以在和原页面相同的页 面上,放置更新后的行内容,比放置在不同的页面上更加高效。
对于从未更新过表项的表来说,完全填充是最好的选择。但是对于更新规模较大的表, 较小填充因子更加合适。TOAST 表不支持设置该参数。 - “延迟”:勾选该复选框延迟该选项。 - “初始化延迟”:勾选该复选框,在设置的默认时间点检查约束。 点击“删除”可删除选中的主键约束。
外键
外键是与不同表中的主键匹配的列或者组合列。以下操作步骤可以新增外键:
步骤1: 在“外键”页签中单击“添加”增加一行外键信息,然后填写“约束名”。
步骤2: 选中选择要作为外键约束的列,可选择一列或者多列。
步骤3: 根据“参照模式”、“参照表”以及“参照列”三个下拉列表框确定外键的关联列。
步骤4: 若选择“参照模式”后,“参照表”列表框为空,请确保对应的模式下有表,并且在对象浏览器中已经完成刷新。点击“删除”可删除选中的外键约束。
唯一
以下操作步骤可以新增唯一约束:
步骤1: 在“唯一”页签中单击“添加”增加一行唯一信息,然后填写“约束名”。
步骤2: 选择要作为主键约束的列,可选择一列或者多列。
步骤3: 可根据需要选择将要创建与“UNIQUE”约束关联的索引所在的“表空间”、填充因子、延迟、初始化延迟等信息。
步骤4: 点击“删除”可删除选中的唯一约束。
检查
以下操作步骤可以新增检查约束:
步骤1: 在“检查”页签中单击“添加”增加一行检查信息,然后填写“约束名称”。
步骤2: 填写约束表达式,在“执行“INSERT”或者“UPDATE”操作,如果检查表达式错误,表数据不可更改。
步骤3: 点击“删除”可删除选中的检查约束。
局部聚簇
以下操作步骤可以新增局部聚簇约束:
步骤1: 在“局部聚簇”页签中单击“添加”增加一行局部聚簇信息,然后填写“约束名称”。
步骤2: 选择要作为局部聚簇约束的列,可选择一列或者多列。下表列出了“表约束”中普通表支持的选项。
约束类型 | 行存表 | 列存表 |
---|---|---|
CHECK | ✔ | ✘ |
UNIQUE | ✔ | ✔ |
PRIMARY KEY | ✔ | ✔ |
FOREIGN KEY | ✔ | ✘ |
PARTIAL CLUSTER KEY | ✘ | ✔ |
定义索引
创建索引为可选操作。索引主要用于增强数据库性能。以下操作步骤可以新增索引:
步骤1: 右键单击“索引”,弹出“创建索引”对话框,然后填写“索引名称”。如需创建“唯一索引”,勾选该复选框。
步骤2: “索引类型”指在VDS中支持对分区表创建全局索引和部分索引,不选择默认创建全局索引。
步骤3: 在“访问方式”中选择要使用的索引方法名称。默认方法是 B-tree。选择要创建索引的表空间。如未指定该参数,将在默认表空间中创建该索引。
步骤4: 索引的“填充因子”指索引方法填充索引页面的百分比。“访问方式”为 B-trees 时, 初次建立索引以及在右侧扩展索引(填写新的最大键值)时,叶子页面填充到该百分比如果后续完全填满,页面将拆分,这样会导致索引效率逐步衰减。B-trees 使用默认填充因子 90,也可以选择 10~100 范围内的整数。如果为静态表,填充因子 100,这样可以尽量减小索引的物理尺寸。对于更新量较大的表,推荐填充因子设置为较小值, 这样可以尽量减少页面拆分的需求。其他索引方法使用的填充因子不同,但是比较类似。默认的填充因子随方法不同而不同。
步骤5: 直接提到索引的用户定义的表达式,也可以使用“列”创建索引在“列” 列表中选择列,可选择一列或者多列。
可单击“删除”删除选中的索引清单中的索引。
下表列出了“索引”中普通表所支持的字段/选项。
字段/选项 | 行存表 | 列存表 |
---|---|---|
唯一索引 | ✔ | ✔ |
btree | ✔ | ✔ |
gin | ✔ | ✔ |
gist | ✔ | ✘ |
psort | ✘ | ✔ |
用户自定义表达式 | ✔ | ✔ |
部分索引 | ✔ | ✘ |
- 填充因子:除gin psort 外的索引支持FILL FACTOR 参数。
- 表空间:指定索引的表空间。如果不指定表空间,则使用默认表空间。
- 索引类型:仅支持分区表选择索引类型。
定义分区
仅在“基本信息”中表类型选择分区表时可以进行操作。
下表列出了各分区类型表支持的字段/选项:
字段/选项名 | 行分区 | 列分区 |
---|---|---|
分区类型 | 范围分区 | 范围分区 |
间隔分区 | ✘ | |
哈希分区 | ✘ | |
列表分区 | ✘ | |
✘ | 垂直分区 |
按照以下步骤定义表的分区:
步骤1: “基本信息”页签中,如果“存储方式”选择为“ROW”,则显示四种“分区类型”, 分别为:“范围分区”,“哈希分区”,“列表分区”,“间隔分区”。如果“表存储方式”选择为“COLUMN”,分区类型支持按范围分区和垂直分区。
- 垂直分区功能仅适用于Vastbase M100 V5.1.0及以上数据库版本。
- 垂直分区的存储方式只支持列存。
- 垂直分区不支持本地分区索引。
- 垂直分区不支持列存表不支持的特性如trigger、foreign key、alter table、modify partition等。
- 创建垂直分区时只需要指定分区列,支持选择多列,不支持设置分区值和表空间。
- 垂直分区表支持增加、删除和查看垂直分区,不支持编辑、切割、合并垂直分区。
步骤2: 从“列”下拉框选择用于定义分区的列。
- 如果“表存储方式”选择为“ROW”或“COLUMN”,则仅能选择一列用于分区。
- 最多可选择 4 列用于定义分区。
步骤3: 在一级分区区域单击“添加”增加一行分区信息,在“分区名称”中输入分区的名称。
步骤4: 设置分区值。
步骤5: 从“表空间”中选择表空间名。
步骤6: 如果需要定义二级分区,则在二级分区区域选择二级分区类型和分区列,单击“添加”新增一行二级分区信息。可以从父分区下拉框选择一级分区,然后填写二级分区名称、分区值及表空间。
垂直不支持创建二级子分区。
定义行访问控制
如果表数据安全要求较高,可以对表增加行访问控制策略。该操作可以影响数据表的读取操作。
按照以下步骤定义表的行访问控制策略:
步骤1: 在“行访问控制”页签中,单击“添加”按钮新增一行行访问控制策略信息,填写策略名称。
步骤2: 指定受影响的操作,支持的操作包括SELECT、UPDATE、DELETE、ALL。ALL表示会影响SELECT、UPDATE、DELETE三种操作。
步骤3: 指定受影响用户(角色),可以选择一个或多个用户,若未指定受影响的用户,则默认为PUBLIC。
步骤4: 定义表达式,条件表达式中不能包含AGG函数和窗口(WINDOW)函数。在查询重写阶段,如果数据表的行访问控制开关打开,满足条件的表达式会添加到计划树中。针对数据表的每条元组,会进行表达式计算,只有表达式返回值为TRUE时,行数据对用户才可见(SELECT、UPDATE、DELETE);当表达式返回FALSE时,该元组对当前用户不可见,用户无法通过SELECT语句查看此元组,无法通过UPDATE语句更新此元组,无法通过DELETE语句删除此元组。
步骤5: 勾选“启用”复选框打开该表的行访问控制开关,策略才能生效。否则不生效。
定义权限
如果希望其他用也能访问该表,可以通过授权操作将表的访问权限赋予其他用户。
按照以下步进行授权:
步骤1: 在“权限”页签单击“添加”按钮新增一行授权信息,通过被授权人下拉框选择要赋予权限的用户。
步骤2: 在“权限”列勾选要赋予的权限。勾选权限项后可勾选该权限相应带授予权限,表示被赋予权限的用户可以将此权限赋予其他用户。
SQL预览
VDS按照“创建表”向导中输入的内容,生成一个 DDL 语句。可以查看、选择、复制该查询,但是无法编辑。
- 要选择查询,按“Ctrl+A”,或单击右键,选择“全选”。
- 要复制所选查询,按“Ctrl+C”,或单击右键,选择“复制”。
单击“完成”创建表。单击“完成”后,生成的查询将被发送到服务器。错误会显示 在对话框和状态栏中。