关系数据库管理
创建数据库
前提条件
用户具有 Admin 角色。默认情况下,root 用户具有 Admin 角色。创建成功后,用户拥有该数据库的全部权限。
语法格式
CREATE DATABASE [IF NOT EXISTS] <db_name> [WITH] [ENCODING [=] <'code_name'>];
参数说明
参数 | 说明 |
---|---|
IF NOT EXISTS | 可选关键字。当使用 IF NOT EXISTS 关键字时,如果目标数据库不存在,系统创建目标数据库。如果目标数据库存在,系统创建数据库失败,但不会报错。当未使用 IF NOT EXISTS 关键字时,如果目标数据库不存在,系统创建目标数据库。如果目标数据库存在,系统报错,提示目标数据库已存在。 |
db_name | 待创建的数据库的名称。该名称必须唯一,且遵循数据库标识符规则。 |
WITH | 可选关键字,是否使用该关键字不影响数据库的创建。 |
ENCODING | 可选关键字,指定编码方式。目前,KWDB 只支持 UTF-8 编码以及 UTF-8 的别名(UTF8 和 UNICODE)。编码值应该用单引号('' )括起来,并且不区分大小写。例如:CREATE DATABASE bank ENCODING = 'UTF-8' 。 |
语法示例
以下示例创建一个名为 db1
的关系数据库。
CREATE DATABASE db1;
查看数据库
前提条件
无
语法格式
SHOW DATABASES [WITH COMMENT];
参数说明
参数 | 说明 |
---|---|
WITH COMMENT | 可选关键字,查看数据库的注释信息。默认情况下,数据库的注释信息为 NULL 。 |
语法示例
说明
时序数据库和关系数据库的 engine_type
分别为 TIME SERIES
和 RELATIONAL
。
以下示例查看已创建的数据库。
SHOW DATABASES;
执行成功后,控制台输出以下信息:
database_name | engine_type
----------------+--------------
db1 | RELATIONAL
db2 | RELATIONAL
defaultdb | RELATIONAL
postgres | RELATIONAL
system | RELATIONAL
iot | TIME SERIES
(6 rows)
切换数据库
前提条件
用户拥有数据库的 CREATE 或 ALL 权限。
语法格式
USE <db_name>;
参数说明
参数 | 说明 |
---|---|
db_name | 待使用的数据库的名称。 |
语法示例
以下示例将 db1
数据库设置为当前数据库。
USE db1;
修改数据库
KWDB 支持修改数据库名称。
说明
KWDB 不支持修改视图关联的数据库的名称。
前提条件
用户为 Admin 用户或者 Admin 角色成员。默认情况下,root 用户具有 Admin 角色。
语法格式
ALTER DATABASE <db_name> RENAME TO <new_name>;
参数说明
参数 | 说明 |
---|---|
db_name | 待修改的数据库名称。如果目标数据库为当前数据库,或者将 sql_safe_updates 参数设置为 true ,则无法重命名该数据库。 |
new_name | 拟修改的数据库名称,新数据库名称必须唯一,并且遵循数据库标识符规则。 |
语法示例
修改数据库的名称。
以下示例将
rdb
数据库重命名为relationaldb
。-- 1. 查看所有数据库。 SHOW DATABASES; database_name|engine_type -------------+----------- defaultdb |RELATIONAL postgres |RELATIONAL rdb |RELATIONAL system |RELATIONAL tsdb |TIME SERIES (5 rows) -- 2. 重命名数据库。 ALTER DATABASE rdb RENAME TO relationaldb; ALTER DATABASE -- 3. 查看所有数据库。 SHOW DATABASES; database_name|engine_type -------------+----------- defaultdb |RELATIONAL postgres |RELATIONAL relationaldb |RELATIONAL system |RELATIONAL tsdb |TIME SERIES (5 rows)
删除数据库
前提条件
- 用户拥有目标数据库和其下全部模式及对象的 DROP 权限。删除成功后,所有用户针对目标数据库和其下全部模式及对象的所有权限均被删除。
- 目标数据库不能是当前数据库。如需删除当前数据库,使用
USE <database_name>
语句将当前数据库切换成其他数据库,再进行删除。
语法格式
DROP DATABASE [IF EXISTS] <db_name> [CASCADE | RESTRICT];
参数说明
参数 | 说明 |
---|---|
IF EXISTS | 可选关键字。当使用 IF EXISTS 关键字时,如果目标数据库存在,系统删除目标数据库。如果目标数据库不存在,系统删除数据库失败,但不会报错。当未使用 IF EXISTS 关键字时,如果目标数据库存在,系统删除目标数据库。如果目标数据库不存在,系统报错,提示目标数据库不存在。 |
db_name | 待删除的数据库的名称。 |
CASCADE | 可选关键字,表示级联删除,即删除数据库中的所有表、视图及其关联对象(例如约束和视图)。CASCADE 不会列出待删除的关联对象,应谨慎使用。 |
RESTRICT | 可选关键字,如果目标数据库包含表和视图,系统报错,提示目标数据库为非空数据库。 |
语法示例
使用
CASCADE
关键字删除数据库及其对象。以下示例使用
CASCADE
关键字删除relationaldb
数据库及其级联对象。-- 1. 查看 relationaldb 数据库中的关系表。 SHOW TABLES FROM relationaldb; table_name|table_type ----------+---------- ints |BASE TABLE (1 row) -- 2. 删除 relationaldb 数据库及其级联对象。 DROP DATABASE relationaldb CASCADE; DROP DATABASE -- 3. 查看 relationaldb 数据库中的关系表。 SHOW TABLES FROM relationaldb; ERROR: target database or schema does not exist
使用
RESTRICT
关键字阻止删除非空数据库。以下示例使用
RESTRICT
关键字阻止删除db1
非空数据库。-- 1. 查看 db1 数据库中的关系表。 SHOW TABLES FROM db1; table_name|table_type ----------+---------- int |BASE TABLE ints |BASE TABLE (2 rows) -- 2. 删除 db1 数据库。 DROP DATABASE db1 RESTRICT; ERROR: database "db1" is not empty and RESTRICT was specified