GBase 8a 学习笔记 008 —— GBase 8a MPP Cluster SQL DDL-数据库、表管理
DDL综述
DDL(Data Definition Language)
- 数据库定义语言,用于定义和管理数据库中的所有对象的SQL语言。
- DDL操作影响数据库对象的元数据信息,一条DDL命令会在所有gcluster管理节点和gnode计算节点执行,所有节点保存元数据信息。
对象 | 对象含义 | 支持的DDL操作 |
---|---|---|
DATABASE | 数据库 | CREATE、DROP |
TABLE | 表 | CREATE、ALTER、DROP、TRUNCATE |
VIEW | 视图 | CREATE、ALTER、DROP |
INDEX | 索引 | CREATE、ALTER、DROP |
执行逻辑
发起管理节点会将DDL命令下发给gcluster管理节点和gnode计算节点,各节点更新元数据、更新系统表,然后返回结果给发起管理节点。
数据库DATABASE
数据库(database)
- 按照一定的数据结构来组织、存储和管理数据的仓库。
- 数据库含有各种成分,包括表、视图、存储过程、自定义函数、索引等
- 一个GBase 8a MPP系统中,可以有一个或多个数据库
- 数据库物理存储是目录,保存在系统参数datadir指定目录下面
- 数据库目录包括metadata(元数据)和sys_tablespace(默认表空间)子目录
- gnode节点的sys_tablespace目录下存放具体的列数据文件。
DATABASE操作语法
创建数据库
CREATE DATABASE [IF NOT EXISTS] database_name;
gbase> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| gbase |
| gctmpdb |
| gclusterdb |
| mydb |
| test |
+--------------------+
7 rows in set (Elapsed: 00:00:00.00)
-- 不带 if not exists 参数
gbase> create database test;
ERROR 1701 (HY000): gcluster database error: Can't create database 'test'; database exists.
gbase>
-- 带 if not exists 参数
gbase> create database if not exists test;
Query OK, 1 row affected, 6 warnings (Elapsed: 00:00:00.01)
gbase> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| gbase |
| gctmpdb |
| gclusterdb |
| mydb |
| test |
+--------------------+
7 rows in set (Elapsed: 00:00:00.00)
删除数据库
DROP DATABASE [IF EXISTS] database_name;
gbase> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| gbase |
| gctmpdb |
| gclusterdb |
| mydb |
| test |
+--------------------+
7 rows in set (Elapsed: 00:00:00.00)
-- 不带 if exists 参数
gbase> drop database demodb;
ERROR 1701 (HY000): gcluster database error: Can't drop database 'demodb'; database doesn't exist.
gbase>
-- 带 if exists 参数
gbase> drop database if exists demodb;
Query OK, 0 rows affected, 6 warnings (Elapsed: 00:00:00.04)
gbase> drop database if exists test;
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| gbase |
| gctmpdb |
| gclusterdb |
| mydb |
+--------------------+
6 rows in set (Elapsed: 00:00:00.00)
gbase>
指定当前数据库
USE database_name;
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
查询现有数据库
show databases;
gbase> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| gbase |
| gctmpdb |
| gclusterdb |
| mydb |
| test |
+--------------------+
7 rows in set (Elapsed: 00:00:00.00)
查询当前数据库
select database();
gbase> select database();
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (Elapsed: 00:00:00.00)
备注:
DROP DATABASE 删除指定的数据库以及它所包含的表。生产环境禁止使用drop语句!
用户需要获得对数据库的 DROP 权限,才可以使用 DROP DATABASE。
表TABLE
表TABLE
-
表是关系型数据库中储存数据的基本架构。表的管理包括创建表、表拷贝、修改表、清空表、删除表。
-
在gbase 8a MPP系统中,表对外为一个整体,内部以表分片在各节点以列文件形式分布存储。
-
表数据有以下性质
- 每一列中的数据都是同类型的数据。
- 不同列有不同的属性名。
- 列是无序的,左右顺序无关。
- 行的次序可以变换,跟顺序无关。
-
GBase 8a集群中,包含如下表类型
- 复制表
- 分布表
- 随机分布表
- hash分布表
-
GBase 8a集群适用的数据模型包括
- 星型
- 雪花型
-
数据模型设计原则
- 大表建成分布表,推荐建成hash分布表
- 小表建成复制表
- 频繁跟其他表做等值join连接的表(如维度表)建成复制表
-
数据分布策略
- 随机分布
- 均匀分布
- 需要遍历所有节点
- hash分布
- 不保证均匀分布
- 确定性分布可预知
- 随机分布
创建表操作语法
创建表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [database_name.]table_name
(column_definition [,column_definition], ... ) [table_options]
参数说明:
- 列定义:列名称 数据类型 [NOT NULL | NULL] [DEFAULT default_value] [COMPRESS (数值)] [COMMENT]
- 表选项:[REPLICATED | DISTRIBUTED BY (’ column_name’) ] [COMPRESS(数值型,字符型)] [COMMENT ]
- DEFAULT:指定数据列的默认值。默认值必须是一个常数,不能是一个函数或者一个表达式。
- COMMENT:指定数据列或表的备注说明。用法:comment ‘备注信息’ 。可以使用 SHOW CREATE TABLE table_name 和 SHOW FULL COLUMNS FROM table_name 语句来显示备注信息。
- COMPRESS:指定相关数据类型的压缩方式。
- 数值型:0,1,5;
- 字符型:0,3,5;
- 0:不压缩;
- 1:对数值型进行深度压缩;
- 3:对字符型进行深度压缩;
- 5:轻度压缩
- 表压缩组合(0,0)、深度压缩(1,3)、轻度压缩(5,5)
分布表
- 分布表可以使数据按指定的策略分布存储在不同的主机上,从而实现分布式数据存储和分布式计算,解决大数据存储容量扩展和计算性能扩展的问题。
- 分布策略:采用hash分布、random分布策略存储数据
- 默认创建的表是随机分布表,每个节点上只保留部分表数据。
- Hash分布表能实现相同数据在同一节点上,实现本地化运算,推荐大表建成hash分布表。
DEMO
# 随机分布表
gbase> CREATE TABLE t1(a int , b varchar(10), KEY a_key (a) USING HASH GLOBAL);
Query OK, 0 rows affected (Elapsed: 00:00:00.18)
# hash分布表
gbase> CREATE TABLE student
-> (stu_no varchar(10), stu_name varchar(200),stu_sex int)
-> DISTRIBUTED BY('stu_no');
Query OK, 0 rows affected (Elapsed: 00:00:00.05)
gbase>
hash分布表—distributed by列对数据分布的影响
Create table user_info ( stat_date date , user_id varchar(20)) distributed by (‘user_id’)
# 数据情况:表中数据 1万条,日期stat_date全是20131231,user_id 完全无重复。
- 选择user_id作为分布列,则每个节点上分布的数据基本相同。
- 选择stat_date 作为分布列,因为全是20131231,则所有数据都会落到一个节点上,造成数据倾斜,性能瓶颈,没达到均匀分布、分散计算的目的。
hash分布数据均匀—分布列选择最重要
- 选取distributed by列字段的原则
- 在多表JOIN查询时,表中某列经常用于JOIN等值关联;
- 表中该列通常是等值查询的列,并且使用的频率很高;
- 做group by操作时,分组字段;
- 表中重复值较少的列,尽量让数据均匀分布。
- 被选为distributed by列字段,有如下限制说明
- 当前只支持INT、BIGINT、varchar、decimal数据类型。
- distributed by列的值,不允许进行update操作。
复制表
- 复制表将会存在于各个节点上,即表的名字和数据完全一致。
- 需要使用REPLICATED关键字来创建复制表。
- 复制表不用拉表即可实现本地运算,效率高。
- 一般来说,小表(维度表)可以被创建成复制表。
- 一些表频繁参与JOIN查询表也可以被创建成复制表。
gbase> create table t1(a int) replicated;
Query OK, 0 rows affected (Elapsed: 00:00:00.04)
表类型
表类型 | 描述 | 特性和用法 |
---|---|---|
随机分布表 | 数据平均分布于集群的所有运算节点,每个节点管理部分表数据 | 默认分布方式 |
hash分布表 | 按照hash分布策略将数据分布于所有运算节点,每个节点管理部分表数据 | 查询速度快,但各节点数据分布不一定平均,有数据倾斜风险,需优化选择hash分布列 |
复制表 | 所有节点,每个节点都有相同的表数据。 | 复制表会存在于各个节点上,即表名和数据完全一致 |
临时表
使用关键词TEMPORARY,临时表被限制在当前连接中,当连接关闭时,临时表会自动被删除。临时表可以是随机分布表、hash分布表、复制表中的任意一种表类型。
创建临时表:(修改和删除语法和普通表一样)
gbase> CREATE TEMPORARY TABLE tem_table (a int);
Query OK, 0 rows affected (Elapsed: 00:00:00.42)
# 创建一个hash分布表的临时表
gbase> CREATE TEMPORARY TABLE t1 (a int,b varchar(10)) DISTRIBUTED BY ('a');
Query OK, 0 rows affected (Elapsed: 00:00:00.05)
注意事项
- 临时表支持除 ALTER 之外的所有 DDL 及 DML 操作。
- 临时表不能被备份。
- 临时表支持在当前连接中使用查询结果导出语句导出表中数据。
表结构和表数据复制
根据列定义以及投影列创建新的表结构,并将 SELECT查询的数据复制到所创建的新表中。不指定目标表的类型时,默认创建随机分布表。
语法:
CREATE TABLE table_name [REPLICATED] [DISTRIBUTED BY] [AS] SELECT...;
DEMO
gbase> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| t1 |
+----------------+
2 rows in set (Elapsed: 00:00:00.00)
gbase> create table t201 distributed by ('a') as select * from t1;
Query OK, 0 rows affected (Elapsed: 00:00:00.24)
gbase> create table t202 replicated as select * from t1;
Query OK, 0 rows affected (Elapsed: 00:00:00.08)
gbase> create table t203 as select * from t1 ;
Query OK, 0 rows affected (Elapsed: 00:00:00.08)
gbase> create table t204 as select * from t1 limit 0;
Query OK, 0 rows affected (Elapsed: 00:00:00.09)
gbase> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| t1 |
| t201 |
| t202 |
| t203 |
| t204 |
+----------------+
6 rows in set (Elapsed: 00:00:00.00)
gbase>
表结构复制
分为两类
- 根据列定义以及投影列创建新的表结构。…as select…limit 0;
- 只创建表结构,没有数据。目标表和源表的表类型完全一致。…like…
DEMO
gbase> select * from t1 order by a;
+------+-----------+
| a | b |
+------+-----------+
| 1 | Yesterday |
| 2 | Today |
| 3 | Tomorrow |
+------+-----------+
3 rows in set (Elapsed: 00:00:00.15)
gbase> create table t205 distributed by ('a') as select * from t1 limit 0;
Query OK, 0 rows affected (Elapsed: 00:00:02.26)
gbase> select * from t205;
Empty set (Elapsed: 00:00:00.01)
gbase> create table t206 replicated as select * from t1 limit 0;
Query OK, 0 rows affected (Elapsed: 00:00:00.06)
gbase> select * from t206;
Empty set (Elapsed: 00:00:00.01)
gbase> create table t207 as select * from t1 limit 0;
Query OK, 0 rows affected (Elapsed: 00:00:01.32)
gbase> select * from t207;
Empty set (Elapsed: 00:00:00.01)
gbase> CREATE TABLE t208 LIKE t1;
Query OK, 0 rows affected (Elapsed: 00:00:00.08)
gbase> select * from t208;
Empty set (Elapsed: 00:00:00.01)
gbase>
修改表操作语法
修改表语法
ALTER TABLE <表名> [ ADD [COLUMN] (新列定义,,...) ] [ CHANGE ( <旧列名> <新列名> <列类型> ,...... ) ]| MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name ] |[DROP [COLUMN] ( <列名> ,...... ) ] | RENAME [TO] <新表名> | SHRINK SPACE |ALTER [列名] COMPRESS (值)|;
说明:
ADD [COLUMN] (新列定义,…):增加新列。
CHANGE ( <旧列名> <新列名> <列类型> ,… ):修改列名称。不支持修改列定义。
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]:修改表中存在列的位置。不支持修改列定义。
DROP [COLUMN] ( <列名> ,… ):删除表中存在的列。
RENAME [TO] <新表名>:修改表名称。
SHRINK SPACE :释放被删除的数据文件所占的磁盘空间。
ALTER [列名] COMPRESS(值):修改表或列的压缩方式。
gbase> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| b | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (Elapsed: 00:00:00.00)
# 新增一列,列名为c
gbase> ALTER TABLE t1 ADD column c varchar(10) null;
Query OK, 3 rows affected (Elapsed: 00:00:00.16)
Records: 3 Duplicates: 3 Warnings: 0
gbase> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| b | varchar(10) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.00)
gbase>
# 修改b列的名字为d
gbase> ALTER TABLE t1 CHANGE b d varchar(10);
Query OK, 0 rows affected (Elapsed: 00:00:00.07)
Records: 0 Duplicates: 0 Warnings: 0
gbase> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| d | varchar(10) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.00)
gbase>
# 修改d列字段位置为第一个
gbase> ALTER TABLE t1 MODIFY d varchar(10) FIRST;
Query OK, 3 rows affected (Elapsed: 00:00:02.28)
Records: 3 Duplicates: 3 Warnings: 0
gbase> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| d | varchar(10) | YES | | NULL | |
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.00)
gbase>
# 修改d列字段位置在c列后面
gbase> ALTER TABLE t1 MODIFY d varchar(10) AFTER c;
Query OK, 3 rows affected (Elapsed: 00:00:02.26)
Records: 3 Duplicates: 3 Warnings: 0
gbase> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
| d | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.00)
gbase>
# 修改d列的varchar字段最大长度到100字符
gbase> ALTER TABLE t1 MODIFY d varchar(100);
Query OK, 0 rows affected (Elapsed: 00:00:00.05)
Records: 0 Duplicates: 0 Warnings: 0
gbase> desc t1;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
| d | varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.00)
gbase>
# 删除d列
gbase> ALTER TABLE t1 DROP column d;
Query OK, 3 rows affected (Elapsed: 00:00:02.41)
Records: 3 Duplicates: 3 Warnings: 0
gbase> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (Elapsed: 00:00:00.00)
gbase>
# 修改表t1的名字为t200
gbase> ALTER TABLE t1 RENAME t200;
Query OK, 0 rows affected (Elapsed: 00:00:02.68)
gbase> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| t200 |
| t201 |
| t202 |
| t203 |
| t204 |
| t205 |
| t206 |
| t207 |
| t208 |
+----------------+
10 rows in set (Elapsed: 00:00:00.00)
gbase>
注意事项:
- 不支持改变列的数据类型、改变列的属性(NOT NULL,默认值)、改变表的字符集;
- varchar类型可改变列的长度,只能变大,不能变小
字段类型的修改方法
- 修改字段类型,不支持直接sql语句进行修改。
- 可通过如下 6 步修改列的类型:
- 增加新列->update新列值->移动新列至指定位置->老列重命名->新列重命名->删除老列
# demo:修改表中 oldcol 列类型由 float(18,6) 修改成 decimal(26,6)
gbase> select * from t200;
+------+------+------------+
| a | c | oldcol |
+------+------+------------+
| 3 | ccc | 123.456001 |
| 2 | bbb | 12.340000 |
| 1 | aaa | 1.230000 |
+------+------+------------+
3 rows in set (Elapsed: 00:00:00.01)
gbase> alter table t200 add column newcol decimal(26,6);
Query OK, 3 rows affected (Elapsed: 00:00:00.06)
Records: 3 Duplicates: 3 Warnings: 0
gbase> desc t200;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
| oldcol | float(18,6) | YES | | NULL | |
| newcol | decimal(26,6) | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
4 rows in set (Elapsed: 00:00:00.00)
gbase> select * from t200;
+------+------+------------+--------+
| a | c | oldcol | newcol |
+------+------+------------+--------+
| 3 | ccc | 123.456001 | NULL |
| 2 | bbb | 12.340000 | NULL |
| 1 | aaa | 1.230000 | NULL |
+------+------+------------+--------+
3 rows in set (Elapsed: 00:00:00.01)
gbase> update t200 set newcol = oldcol;
Query OK, 3 rows affected (Elapsed: 00:00:00.03)
Rows matched: 3 Changed: 3 Warnings: 0
gbase> select * from t200;
+------+------+------------+------------+
| a | c | oldcol | newcol |
+------+------+------------+------------+
| 3 | ccc | 123.456001 | 123.456000 |
| 2 | bbb | 12.340000 | 12.340000 |
| 1 | aaa | 1.230000 | 1.230000 |
+------+------+------------+------------+
3 rows in set (Elapsed: 00:00:00.01)
gbase> alter table t200 modify newcol decimal(26,6) after oldcol;
Query OK, 3 rows affected (Elapsed: 00:00:00.05)
Records: 3 Duplicates: 3 Warnings: 0
gbase> desc t200;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
| oldcol | float(18,6) | YES | | NULL | |
| newcol | decimal(26,6) | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
4 rows in set (Elapsed: 00:00:00.00)
gbase> alter table t200 change oldcol bbb float(18,6);
Query OK, 0 rows affected (Elapsed: 00:00:00.04)
Records: 0 Duplicates: 0 Warnings: 0
gbase> desc t200;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
| bbb | float(18,6) | YES | | NULL | |
| newcol | decimal(26,6) | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
4 rows in set (Elapsed: 00:00:00.00)
gbase> alter table t200 change newcol oldcol decimal(26,6);
Query OK, 0 rows affected (Elapsed: 00:00:00.04)
Records: 0 Duplicates: 0 Warnings: 0
gbase> desc t200;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
| bbb | float(18,6) | YES | | NULL | |
| oldcol | decimal(26,6) | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
4 rows in set (Elapsed: 00:00:00.00)
gbase> alter table t200 drop column bbb;
Query OK, 3 rows affected (Elapsed: 00:00:00.04)
Records: 3 Duplicates: 3 Warnings: 0
gbase> desc t200;
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| a | int(11) | YES | | NULL | |
| c | varchar(10) | YES | | NULL | |
| oldcol | decimal(26,6) | YES | | NULL | |
+--------+---------------+------+-----+---------+-------+
3 rows in set (Elapsed: 00:00:00.00)
gbase> select * from t200;
+------+------+------------+
| a | c | oldcol |
+------+------+------------+
| 3 | ccc | 123.456000 |
| 2 | bbb | 12.340000 |
| 1 | aaa | 1.230000 |
+------+------+------------+
3 rows in set (Elapsed: 00:00:00.01)
gbase>
修改压缩方式
修改表或列的压缩方式。
DEMO
# 修改t1表a列的压缩模式为1
ALTER TABLE t1 ALTER a COMPRESS(1);
# 修改t2表压缩模式为55压缩
ALTER TABLE t2 ALTER COMPRESS(5,5);
注意事项:
- 压缩模式保存在DC块结构中,压缩模式改变只对后续入库的数据有效;
- 优先级:列级定义压缩> 表级定义压缩 > 系统参数全局定义压缩方式;
- 数值型(含日期型)数据压缩选项 0、1、5;字符型数据压缩选项0、3、5
- 表的压缩类型可遵循(数值型,字符型)组合:(0, 0)、(1, 3)、(5, 5)…
预租磁盘
- 预租磁盘空间可以预先批量分配磁盘块,尽量保证列的 DC 数据文件磁盘块连续。在顺序读取列 DC 数据时,有助于性能提升。
- 创建表时,可以指定表的自动扩展大小。当表中的存储数据超过指定的预租大小空间时,系统会自动按照预租磁盘大小空间进行自动扩展。
- 预租磁盘空间大小在[1M,2G)范围内设置,单位 M 或 G
创建预租磁盘空间
CREATE TABLE [IF NOT EXISTS] table_name (col type,...) AUTOEXTEND ON NEXT NUM[M/G];
# 注:NUM 的有效范围为 1M ≤ NUM < 2G。
修改预租磁盘空间
ALTER TABLE table_name AUTOEXTEND ON NEXT NUM[M/G]
关闭预租磁盘空间
ALTER TABLE table_name AUTOEXTEND OFF
其他表操作语法
重命名表
RENAME TABLE 原表名 TO 新表名;
ALTER TABLE 原表名 RENAME 新表名;
清空表内容
# 删除表中所有行,但表结构及其列、约束、索引等保持不变。
TRUNCATE TABLE b;
删除表
drop table t1;
# 删除表中所有行,但表结构及其列、约束、索引等保持不变。
gbase> TRUNCATE TABLE t200;
Query OK, 3 rows affected (Elapsed: 00:00:00.07)
gbase> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| t200 |
| t201 |
| t202 |
| t203 |
| t204 |
| t205 |
| t206 |
| t207 |
| t208 |
+----------------+
10 rows in set (Elapsed: 00:00:00.00)
gbase> select * from t200;
Empty set (Elapsed: 00:00:00.02)
gbase> drop table t200;
Query OK, 0 rows affected (Elapsed: 00:00:08.12)
gbase> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| t201 |
| t202 |
| t203 |
| t204 |
| t205 |
| t206 |
| t207 |
| t208 |
+----------------+
9 rows in set (Elapsed: 00:00:00.00)
gbase> select * from t200;
ERROR 1146 (42S02): Table 'test.t200' doesn't exist
gbase>
注意事项:
- TRUNCATE比DELETE效率高,还能释放物理空间;
- DROP TABLE 移除表的数据和表定义,用户必须有表的 DROP 权限。生产环境慎用此命令!