3.6 管理表
3.6 管理表
3.6.1 基表定义语句
用户数据库建立后,就可以定义基表来保存用户数据的结构。达梦数据库中基表可以分
为两类,分别为数据库表和外部表,数据库表由数据库管理系统自行组织管理,而外部表在
数据库的外部组织,是操作系统文件。手册中如无明确说明基表均指数据库表。下面分别对
这两类基表的创建与使用进行详细描述。
3.6.1.1 数据库基表
用户数据库建立后,就可以定义基表来保存用户数据的结构。需指定如下信息:
1. 表名、表所属的模式名;
2. 列定义;
3. 完整性约束。
语法格式
CREATE [[GLOBAL] TEMPORARY] TABLE <表名定义> <表结构定义>; <表名定义> ::= [<模式名>.] <表名> <表结构定义>::=<表结构定义 1> | <表结构定义 2> <表结构定义 1>::= (<列定义> {,<列定义>} [,<表级约束定义>{,<表级约束定义>}]) [ON COMMIT <DELETE | PRESERVE> ROWS] [<PARTITION 子句>][<空间限制子句>] [<STORAGE 子句>][<压缩子句>] [<ROW MOVEMENT 子句>][<DISTRIBUTE 子句>] <表结构定义 2>::= [ON COMMIT <DELETE | PRESERVE> ROWS] [<空间限制子句>][<STORAGE 子句>] [<压缩子句>]AS <不带 INTO 的 SELECT 语句>[<DISTRIBUTE 子句>]; <列定义> ::= <不同类型列定义> [<列定义子句>] [<STORAGE 子句>][<存储加密子句>] <不同类型列定义> ::=<普通列定义>|<虚拟列列定义> <普通列定义>::= <列名> <数据类型> <虚拟列列定义> ::= <列名>[<数据类型>] [GENERATED ALWAYS]AS (<虚拟列定义>) [VIRTUAL] [VISIBLE] <列定义子句> ::= DEFAULT <列缺省值表达式> | <IDENTITY 子句> | <列级约束定义> | DEFAULT <列缺省值表达式> <列级约束定义> | <IDENTITY 子句> <列级约束定义> | <列级约束定义> DEFAULT <列缺省值表达式> | <列级约束定义> <IDENTITY 子句> <IDENTITY 子句> ::= IDENTITY [(<种子>,<增量>)] <列级约束定义> ::= <列级完整性约束>{,<列级完整性约束>} <列级完整性约束> ::= [CONSTRAINT <约束名>] < column_constraint_action>[<失效生效选项>] < column_constraint_action>::=[NOT] NULL |<唯一性约束选项> [USING INDEX TABLESPACE {<表空间名> | DEFAULT}]|<引用约束> |CHECK (<检验条件>)|NOT VISIBLE <唯一性约束选项> ::= [PRIMARY KEY ]| [[NOT] CLUSTER PRIMARY KEY] |[CLUSTER[UNIQUE] KEY] | UNIQUE |<引用约束> ::= [FOREIGN KEY] REFERENCES [PENDANT] [<模式名>.]<表名>[(<列名>{[,< 列名>]})] [MATCH <FULL|PARTIAL|SIMPLE>][<引用触发动作>] [WITH INDEX] <引用触发动作> ::= <UPDATE 规则> [<DELETE 规则>] | <DELETE 规则> [<UPDATE 规则>] <UPDATE 规则> ::= ON UPDATE <引用动作> <DELETE 规则> ::= ON DELETE <引用动作> <引用动作> ::= CASCADE | SET NULL | SET DEFAULT | NO ACTION <失效生效选项>::=ENABLE | DISABLE <STORAGE 子句> ::= STORAGE(<STORAGE 项> {,<STORAGE 项>}) <STORAGE 项> ::= [INITIAL <初始簇数目>] | [NEXT <下次分配簇数目>] | [MINEXTENTS <最小保留簇数目>] | [ON <表空间名>] | [FILLFACTOR <填充比例>]| [BRANCH <BRANCH 数>]| [BRANCH (<BRANCH 数>, <NOBRANCH 数>)]| [NOBRANCH]| [CLUSTERBTR]| [WITH COUNTER]| [WITHOUT COUNTER] | [USING LONG ROW] <存储加密子句> ::= <存储加密子句 1>|<存储加密子句 2> <存储加密子句 1> ::= ENCRYPT [<加密用法>|<加密用法><加密模式>|<加密模式>] <存储加密子句 2> ::= ENCRYPT { <加密用法>|<加密用法><加密模式>|<加密模式>}<散列选项> <加密用法> ::= WITH <加密算法> <加密模式> ::= <透明加密模式> | <半透明加密模式> <透明加密模式> ::= AUTO <半透明加密模式> ::= MANUAL</DI< div> <散列选项> ::= HASH WITH [<密码引擎名>].<散列算法> [<加盐选项>] <加盐选项> ::= [NO] SALT <加密算法> ::= DES_ECB | DES_CBC | DES_CFB|DES_OFB|DESEDE_ECB| DESEDE_CBC | DESEDE_CFB|DESEDE_OFB | AES128_ECB | AES128_CBC | AES128_CFB | AES128_OFB | AES192_ECB | AES192_CBC | AES192_CFB | AES192_OFB | AES256_ECB | AES256_CBC | AES256_CFB | AES256_OFB | RC4 <散列算法> ::= MD5 | SHA1 <表级约束定义>::=[CONSTRAINT <约束名>] <表级约束子句>[<失效生效选项>] <表级约束子句>::=<表级完整性约束> <表级完整性约束> ::= <唯一性约束选项> (<列名> {,<列名>}) [USING INDEX TABLESPACE{ <表空间名> | DEFAULT}]| FOREIGN KEY (<列名>{,<列名>}) <引用约束> | CHECK (<检验条件>) <PARTITION 子句> ::= PARTITION BY <PARTITION 项> <PARTITION 项> ::= RANGE (<列名>{,<列名>}) [INTERVAL <间隔表达式>] [<子分区模板>{,<子分区模 板>}](<RANGE 分区项> {,<RANGE 分区项>}) | HASH (<列名>{,<列名>}) [<子分区模板>{,<子分区模板>}]PARTITIONS <分区数> [<STORAGE HASH 子句>]| HASH(<列名>{,<列名>})[<子分区模板>{,<子分区模板>}] (<HASH 分区项> {,<HASH 分 区项>})| LIST(<列名>)[<子分区模板>{,<子分区模板>}](<LIST 分区项> {,<LIST 分区项>})| COLUMN (<列名> {,<列名>}) [AS <别名>]| COLUMN (<列分区项> {,<列分区项>}) <RANGE 分区项>::= PARTITION <分区名> VALUES [EQU OR] LESS THAN (<常量表达式|< 日期函数表达式>|MAXVALUE>{,<常量表达式|<日期函数表达式>|MAXVALUE>}) [<STORAGE 子 句>][<子分区描述项>] < 日 期 函 数 表 达 式 > ::= <to_date 函数表达式 > | <to_datetime 函 数 表 达 式 > | <to_timestamp 函数表达式> <列分区项>::= (<列名>{,<列名>}) [AS <别名>] [<STORAGE 子句>] <HASH 分区项>::= PARTITION <分区名> [<STORAGE 子句>][<子分区描述项>] <LIST 分区项>::= PARTITION <分区名> VALUES (DEFAULT|<<表达式>,{<表达式>}>) [<STORAGE 子句>][<子分区描述项>] <子分区描述项> ::= (<RANGE 子分区描述项>{,<RANGE 子分区描述项>})| (<HASH 子分区描述项>{,<HASH 子分区描述项>})| SUBPARTITIONS <分区数> [<STORAGE HASH 子句>]| (<LIST 子分区描述项>{,<LIST 子分区描述项>}) <RANGE 子分区描述项> ::= <RANGE 子分区项>[<子分区描述项>] <HASH 子分区描述项> ::= <HASH 子分区项>[<子分区描述项>] <LIST 子分区描述项> ::= <LIST 子分区项>[<子分区描述项>]</DI< div> <RANGE 子分区项> ::= SUBPARTITION <分区名> VALUES [EQU OR] LESS THAN (<常量表达式|<日期函数表达 式>|MAXVALUE>){,<常量表达式|<日期函数表达式>|MAXVALUE>}) [<STORAGE 子句>] <HASH 子分区项> ::= SUBPARTITION <分区名> [<STORAGE 子句>] <LIST 子分区项> ::= SUBPARTITION <分区名> VALUES (DEFAULT|<<表达式>,{<表达式>}>) [<STORAGE 子句>] <间隔表达式> ::= <日期间隔函数> | <数值常量> <子分区模板> ::= <RANGE 子分区模板>|<HASH 子分区模板>|<LIST 子分区模板> <RANGE 子分区模板> ::= SUBPARTITION BY RANGE (<列名>{,<列名>})[SUBPARTITION TEMPLATE (<RANGE 分区项> {,<RANGE 分区项>})] <HASH 子分区模板> ::= SUBPARTITION BY HASH (<列名>{,<列名>})SUBPARTITION TEMPLATE SUBPARTIONS <分区数> [<STORAGE HASH 子句>]| SUBPARTITION BY HASH (<列名>{,<列名>})SUBPARTITION TEMPLATE (<HASH 分区 项> {,<HASH 分区项>}) <LIST 子分区模板> ::= SUBPARTITION BY LIST (<列名>{,<列名>})[SUBPARTITION TEMPLATE (<LIST 分区项> {,<LIST 分区项>})] <STORAGE HASH 子句> ::= STORE IN (<表空间名列表>) <空间限制子句> ::= DISKSPACE LIMIT <空间大小>| DISKSPACE UNLIMITED <压缩子句> ::= COMPRESS | COMPRESS (<列名> {,<列名>}) | COMPRESS EXCEPT (<列名> {,<列名>}) <ROW MOVEMENT 子句> ::= ENABLE ROW MOVEMENT | DISABLE ROW MOVEMENT <DISTRIBUTE 子句> ::= DISTRIBUTED [RANDOMLY | FULLY]| DISTRIBUTED BY [<HASH>](<列名> {,<列名>})| DISTRIBUTED BY RANGE (<列名> {,<列名>})(<范围分布项> {,<范围分布项>})| DISTRIBUTED BY LIST (<<列名> {,<列名>}>)(<列表分布项> {,<列表分布项>}) <范围分布项> ::= VALUES LESS THAN (<表达式>{,<表达式>}) ON <实例名>| VALUES EQU OR LESS THAN (<表达式>{,<表达式>}) ON <实例名> <列表分布项> ::= VALUES (<表达式>{,<表达式>}) ON <实例名> <不带 INTO 的 SELECT 语句> ::= <查询表达式>|<带参数查询语句> <带参数查询语句>::=<子查询>|(<带参数查询语句>)
参数
1. <模式名> 指明该表属于哪个模式,缺省为当前模式;
2. <表名> 指明被创建的基表名,基表名最大长度 128 字节;如果是分区表,主表 名和分区名遵循“主表名+分区名”总长度不大于 128 字节。分区子表系统会默认 命名,命名规则为:主表名_分区名,其中 hash 分区的分区子表命名规则是:基表名_DMHASHPART+分区序号;
3. <列名> 指明基表中的列名,列名最大长度 128 字节;
4. <数据类型> 指明列的数据类型;
5. <列缺省值表达式> 如果随后的 INSERT 语句省略了插入的列值,那么此项为列 值指定一个缺省值,可以通过 DEFAULT 指定一个值。DEFAULT 表达式串的长度 不能超过 2048 字节;
6. <列级完整性约束定义>中的参数:
1) NULL 指明指定列可以包含空值,为缺省选项。
2) NOT NULL 非空约束,指明指定列不可以包含空值;
3) UNIQUE 唯一性约束,指明指定列作为唯一关键字;
4) PRIMARY KEY 主键约束,指明指定列作为基表的主关键字;
5) CLUSTER PRIMARY KEY 主键约束,指明指定列作为基表的聚集索引(也 叫聚簇索引)主关键字;
6) NOT CLUSTER PRIMARY KEY 主键约束,指明指定列作为基表的非聚集索 引主关键字;
7) CLUSTER KEY 指定列为聚集索引键,但是是非唯一的;
8) CLUSTER UNIQUE KEY 指定列为聚集索引键,并且是唯一的;
9) USING INDEX TABLESPACE <表空间名> 指定索引存储的表空间;
10) REFERENCES 指明指定列的引用约束。引用约束要求引用对应列类型必须基 本一致。所谓基本,是因为 CHAR 与 VARCHAR,BINARY 与 VARBINARY, TINYINT、SMALLINT 与 INT 在此被认为是一致的。如果有 WITH INDEX 选项,则为引用约束建立索引,否则不建立索引,通过其他内部机制保证约束 正确性;
11) CHECK 检查约束,指明指定列必须满足的条件;
12) NOT VISIBLE 列不可见,当指定某列不可见时,使用 SELECT *进行查询 时将不添加该列作为选择列。不可见列不能创建索引;使用 INSERT 无显式 指定列列表进行插入时,值列表不能包含隐藏列的值。
7. <表级完整性约束>中的参数:
1) UNIQUE 唯一性约束,指明指定列或列的组合作为唯一关键字;
2) PRIMARY KEY 主键约束,指明指定列或列的组合作为基表的主关键字。指 明 CLUSTER,表明是主关键字上聚集索引;指明 NOT CLUSTER,表明是主 关键字上非聚集索引;
3) USING INDEX TABLESPACE <表空间名> 指定索引存储的表空间;
4) FOREIGN KEY 指明表级的引用约束,如果使用 WITH INDEX 选项,则为 引用约束建立索引,否则不建立索引,通过其他内部机制保证约束正确性;
5) CHECK 检查约束,指明基表中的每一行必须满足的条件;
6) 与列级约束之间不应该存在冲突。
8. ON COMMIT<DELETE | PRESERVE>ROWS 用来指定临时表(TEMPORARY)中 的数据是事务级或会话级的,缺省情况下是事务级。ON COMMIT DELETE ROWS: 指定临时表是事务级的,每次事务提交或回滚之后,表中所有数据都被删除;ON COMMIT PRESERVE ROWS:指定临时表是会话级的,会话结束时才清空表;
9. <检验条件> 指明表中一列或多列能否接受的数据值或格式;
10. <查询表达式>和<子查询> 定义请查看数据查询章节;
11. <间隔表达式>中日期间隔函数为:NUMTOYMINTERVAL、NUMTODSINTERVAL; 数值常量为:整型、DEC 类型。使用了<间隔表达式>的分区表称为间隔分区表。 间隔分区表只能包含一个分区列,且该分区列类型为日期或数值。当对间隔分区表中的数据进行插入或更新操作时,若新的数据无法匹配现有的分区子表,则系统将 自动以用户指定的现有分区的末尾临界值为起始值,以<间隔表达式>指定的值为 间 隔 值 创 建 一 个 可 以 匹 配 新 数 据 的 间 隔 分 区 。 用 户 可 通 过 查 看 系 统 表 SYSHPARTTABLEINFO 来获取新建分区的分区表 ID 以及分区名等信息。该功能 可方便数据库管理员对分区表的管理。
12. STORAGE 项中: BRANCH、NOBRANCH 是堆表创建关键字,堆表为―扁平 B 树表‖。这两个参数用来 指定堆表并发分支 BRANCH 和非并发分支 NOBRANCH 的数目。<BRANCH 数>取值 范围为 1~64,<NOBRANCH 数>取值范围为 1~64。
1)NOBRANCH:指定创建的表为堆表,并发分支个数为 0,非并发分支个数 为 1;
2)BRANCH(<BRANCH 数>, <NOBRANCH 数>):指定创建的表为堆表,并 发分支个数为<BRANCH 数>,非并发个数为<NOBRANCH 数>;
3)BRANCH <BRANCH 数>:指定创建的表为堆表,并发分支个数为<BRANCH 数>,非并发分支个数为 0。 CLUSTERBTR:指定创建的表为非堆表,即普通 B 树表;
13. 组合水平分区表层次最多支持八层;
14. 多级分区表支持自定义子分区描述项,自定义的子分区描述项分区类型与分区列必 须与子分区模板一致。如果子分区模板和自定义子分区描述项均指定了分区信息则 按自定义分区描述项处理;
15. 垂直分区表不支持多级分区。普通表、堆表、列存储表均支持多级分区;
16. <ROW MOVEMENT 子句>仅对行存储的水平分区表有效,其它表类型自动忽略;
17. <虚拟列定义>指明定义虚拟列的表达式。
图例
col_define_low
标签:语句,分区,指定,3.6,分区表,KEY,指明,SUBPARTITION,达梦 From: https://www.cnblogs.com/ios9/p/17965817