暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8a 学习笔记 008 —— GBase 8a MPP Cluster SQL DDL-数据库、表管理

心有阳光 2023-03-03
1584

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)

gbase8a076.png

删除数据库

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>

gbase8a075.png

指定当前数据库

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)

gbase8a077.png

备注:
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>

gbase8a078.png

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>

gbase8a079.png

表结构复制

分为两类

  • 根据列定义以及投影列创建新的表结构。…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>

gbase8a080.png

修改表操作语法

修改表语法

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>

gbase8a081.png

gbase8a082.png

注意事项:

  • 不支持改变列的数据类型、改变列的属性(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>

gbase8a083.png

gbase8a084.png

gbase8a085.png

修改压缩方式

修改表或列的压缩方式。

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>

gbase8a086.png

注意事项:

  • TRUNCATE比DELETE效率高,还能释放物理空间;
  • DROP TABLE 移除表的数据和表定义,用户必须有表的 DROP 权限。生产环境慎用此命令!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论