03-table.md 6.7 KB
Newer Older
1
---
G
gccgdb1234 已提交
2
title: 
3 4
sidebar_label: 
description: 对表的各种管理操作
5 6
---

7 8 9 10 11
## 创建表

`CREATE TABLE` 语句用于创建普通表和以超级表为模板创建子表。

```sql
B
beyoung 已提交
12
CREATE TABLE [IF NOT EXISTS] [db_name.]tb_name (create_definition [, create_definition] ...) [table_options]
13

14
CREATE TABLE create_subtable_clause
15

B
beyoung 已提交
16 17
CREATE TABLE [IF NOT EXISTS] [db_name.]tb_name (create_definition [, create_definition] ...)
    [TAGS (create_definition [, create_definition] ...)]
18
    [table_options]
19

20 21 22 23
create_subtable_clause: {
    create_subtable_clause [create_subtable_clause] ...
  | [IF NOT EXISTS] [db_name.]tb_name USING [db_name.]stb_name [(tag_name [, tag_name] ...)] TAGS (tag_value [, tag_value] ...)
}
24

25
create_definition:
D
dapan1121 已提交
26
    col_name column_type
27

28 29
table_options:
    table_option ...
30

31 32 33 34 35 36 37 38 39 40 41 42
table_option: {
    COMMENT 'string_value'
  | WATERMARK duration[,duration]
  | MAX_DELAY duration[,duration]
  | ROLLUP(func_name [, func_name] ...)
  | SMA(col_name [, col_name] ...)
  | TTL value
}

```

**使用说明**
43 44 45

1. 表的第一个字段必须是 TIMESTAMP,并且系统自动将其设为主键;
2. 表名最大长度为 192;
46
3. 表的每行长度不能超过 48KB;(注意:每个 BINARY/NCHAR 类型的列还会额外占用 2 个字节的存储位置)
47 48 49 50 51 52
4. 子表名只能由字母、数字和下划线组成,且不能以数字开头,不区分大小写
5. 使用数据类型 binary 或 nchar,需指定其最长的字节数,如 binary(20),表示 20 字节;
6. 为了兼容支持更多形式的表名,TDengine 引入新的转义符 "\`",可以让表名与关键词不冲突,同时不受限于上述表名称合法性约束检查。但是同样具有长度限制要求。使用转义字符以后,不再对转义字符中的内容进行大小写统一。
   例如:\`aBc\`\`abc\` 是不同的表名,但是 abc 和 aBc 是相同的表名。
   需要注意的是转义字符中的内容必须是可打印字符。

53
**参数说明**
54

55
1. COMMENT:表注释。可用于超级表、子表和普通表。
56 57 58 59
2. WATERMARK:指定窗口的关闭时间,默认值为 5 秒,最小单位毫秒,范围为 0 到 15 分钟,多个以逗号分隔。只可用于超级表,且只有当数据库使用了 RETENTIONS 参数时,才可以使用此表参数。
3. MAX_DELAY:用于控制推送计算结果的最大延迟,默认值为 interval 的值(但不能超过最大值),最小单位毫秒,范围为 1 毫秒到 15 分钟,多个以逗号分隔。注:不建议 MAX_DELAY 设置太小,否则会过于频繁的推送结果,影响存储和查询性能,如无特殊需求,取默认值即可。只可用于超级表,且只有当数据库使用了 RETENTIONS 参数时,才可以使用此表参数。
4. ROLLUP:Rollup 指定的聚合函数,提供基于多层级的降采样聚合结果。只可用于超级表。只有当数据库使用了 RETENTIONS 参数时,才可以使用此表参数。作用于超级表除 TS 列外的其它所有列,但是只能定义一个聚合函数。 聚合函数支持 avg, sum, min, max, last, first。
5. SMA:Small Materialized Aggregates,提供基于数据块的自定义预计算功能。预计算类型包括 MAX、MIN 和 SUM。可用于超级表/普通表。
D
dapan1121 已提交
60
6. TTL:Time to Live,是用户用来指定表的生命周期的参数。如果创建表时指定了这个参数,当该表的存在时间超过 TTL 指定的时间后,TDengine 自动删除该表。这个 TTL 的时间只是一个大概时间,系统不保证到了时间一定会将其删除,而只保证存在这样一个机制且最终一定会删除。TTL 单位是天,默认为 0,表示不限制,到期时间为表创建时间加上 TTL 时间。TTL 与数据库 KEEP 参数没有关联,如果 KEEP 比 TTL 小,在表被删除之前数据也可能已经被删除。
61

62
## 创建子表
63

G
gccgdb1234 已提交
64
### 创建子表
65 66

```sql
67 68 69
CREATE TABLE [IF NOT EXISTS] tb_name USING stb_name TAGS (tag_value1, ...);
```

G
gccgdb1234 已提交
70
### 创建子表并指定标签的值
71

72
```sql
73 74 75
CREATE TABLE [IF NOT EXISTS] tb_name USING stb_name (tag_name1, ...) TAGS (tag_value1, ...);
```

76
以指定的超级表为模板,也可以指定一部分 TAGS 列的值来创建数据表(没被指定的 TAGS 列会设为空值)。
77

78
### 批量创建子表
79

80
```sql
81 82 83
CREATE TABLE [IF NOT EXISTS] tb_name1 USING stb_name TAGS (tag_value1, ...) [IF NOT EXISTS] tb_name2 USING stb_name TAGS (tag_value2, ...) ...;
```

84
批量建表方式要求数据表必须以超级表为模板。 在不超出 SQL 语句长度限制的前提下,单条语句中的建表数量建议控制在 1000 ~ 3000 之间,将会获得比较理想的建表速度。
85

86
## 修改普通表
87

88 89
```sql
ALTER TABLE [db_name.]tb_name alter_table_clause
90

91 92 93 94 95 96 97
alter_table_clause: {
    alter_table_options
  | ADD COLUMN col_name column_type
  | DROP COLUMN col_name
  | MODIFY COLUMN col_name column_type
  | RENAME COLUMN old_col_name new_col_name
}
98

99 100
alter_table_options:
    alter_table_option ...
101

102 103 104 105
alter_table_option: {
    TTL value
  | COMMENT 'string_value'
}
106 107 108

```

109 110
**使用说明**
对普通表可以进行如下修改操作
111

112 113
1. ADD COLUMN:添加列。
2. DROP COLUMN:删除列。
R
Raistlin Chan 已提交
114
3. MODIFY COLUMN:修改列定义,如果数据列的类型是可变长类型,那么可以使用此指令修改其宽度,只能改大,不能改小。
115
4. RENAME COLUMN:修改列名称。
116

117
### 增加列
118

119 120 121
```sql
ALTER TABLE tb_name ADD COLUMN field_name data_type;
```
122

123
### 删除列
124

125
```sql
126 127 128
ALTER TABLE tb_name DROP COLUMN field_name;
```

129
### 修改列宽
130

131
```sql
132 133 134
ALTER TABLE tb_name MODIFY COLUMN field_name data_type(length);
```

135 136 137 138 139 140 141 142
### 修改列名

```sql
ALTER TABLE tb_name RENAME COLUMN old_col_name new_col_name
```

## 修改子表

G
gccgdb1234 已提交
143
```sql
144
ALTER TABLE [db_name.]tb_name alter_table_clause
145

146 147 148 149
alter_table_clause: {
    alter_table_options
  | SET TAG tag_name = new_tag_value
}
150

151 152
alter_table_options:
    alter_table_option ...
153

154 155 156 157
alter_table_option: {
    TTL value
  | COMMENT 'string_value'
}
G
gccgdb1234 已提交
158
```
159 160

**使用说明**
161

162
1. 对子表的列和标签的修改,除了更改标签值以外,都要通过超级表才能进行。
163 164 165 166 167

### 修改子表标签值

```
ALTER TABLE tb_name SET TAG tag_name=new_tag_value;
G
gccgdb1234 已提交
168 169 170 171
```

## 删除表

172
可以在一条 SQL 语句中删除一个或多个普通表或子表。
G
gccgdb1234 已提交
173 174 175 176 177 178 179 180 181

```sql
DROP TABLE [IF EXISTS] [db_name.]tb_name [, [IF EXISTS] [db_name.]tb_name] ...
```

## 查看表的信息

### 显示所有表

182
如下 SQL 语句可以列出当前数据库中的所有表名。
G
gccgdb1234 已提交
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198

```sql
SHOW TABLES [LIKE tb_name_wildchar];
```

### 显示表创建语句

```
SHOW CREATE TABLE tb_name;
```

常用于数据库迁移。对一个已经存在的数据表,返回其创建语句;在另一个集群中执行该语句,就能得到一个结构完全相同的数据表。

### 获取表结构信息

```
G
gccgdb1234 已提交
199
DESCRIBE [db_name.]tb_name;
R
Raistlin Chan 已提交
200
```