CREATE DATABASE 语句

最近更新时间:2026-05-06 16:28:12

我的收藏
CREATE DATABASE(或 CREATE SCHEMA)语句用于在 TCHouse-X 中创建新的数据库。
在 TCHouse-X 中,数据库具有双重性质:
逻辑构造:用于在独立的命名空间内将相关的表、视图和函数进行分组。通常为每个应用、相关表集或实验轮次使用不同的数据库。
物理构造:在底层存储上对应一个目录树。该目录内部用于存放数据库下的内表、分区和数据文件。
注意:
如果要使用与 TCHouse-X 保留关键字相同的标识符作为数据库、表、列或视图名称,必须用反引号 ``包裹该标识符。

语法

CREATE (DATABASE | SCHEMA) [IF NOT EXISTS] database_name [COMMENT 'database_comment']

语法说明

关键字/参数
说明
IF NOT EXISTS
可选。如果指定的数据库已存在,则语句不会抛出错误,而是成功执行并发出警告。
database_name
必需。 新数据库的名称。
COMMENT
可选。为数据库添加描述性注释。

使用说明

默认数据库:初次连接 TCHouse-X 时,默认所在的数据库是 default
切换数据库:创建数据库后,可以使用 USE database_name 语句切换当前操作的数据库。切换后,在引用该数据库下的表时,可以省略数据库名前缀。
数据库引用:即使不切换,您也可以始终使用完全限定名(db_name.table_name)来引用任何数据库中的表。
删除数据库限制
您不能删除当前正在使用 (USE) 的数据库。
在删除数据库之前,必须先删除其中的所有表。或者,可以使用 CASCADE 子句强制删除数据库及其所有内容。

示例

-- 创建并使用第一个数据库
CREATE DATABASE first_db;
USE first_db;
CREATE TABLE t1 (x int);

-- 创建并使用第二个数据库,展示命名空间隔离 (Namespace Isolation)
CREATE DATABASE second_db;
USE second_db;
-- 每个数据库都有独立的表命名空间,因此表名可以重复使用
CREATE TABLE t1 (s string);

-- 创建一个临时数据库
CREATE DATABASE temp_db;

-- 引用表的两种方式:
-- 方法 1:使用全限定名(数据库名.表名)在 temp_db 中创建表 t2
CREATE TABLE temp_db.t2 (x int, y int);

-- 方法 2:先切换数据库上下文,然后在 temp_db 中创建表 t3
USE temp_db;
CREATE TABLE t3 (s string);

-- 尝试删除当前正在使用的数据库(操作会失败)
DROP DATABASE temp_db;
-- 错误示例:ERROR: AnalysisException: Cannot drop current default database: temp_db

-- 切换到 default 数据库,以便删除其他数据库
USE default;

-- 尝试删除一个非空数据库(操作会失败;需要先删除表,或使用 CASCADE 关键字)
DROP DATABASE temp_db;
-- 错误示例:CAUSED BY: InvalidOperationException: Database temp_db is not empty
SHOW TABLES IN temp_db;
/*
+------+
| name |
+------+
| t2 |
| t3 |
+------+
*/

-- 推荐方法:使用 CASCADE 关键字进行级联强制删除
DROP DATABASE temp_db CASCADE;

-- 传统或谨慎的方法:先手动删除所有表,然后再删除数据库
DROP TABLE temp_db.t2;
DROP TABLE temp_db.t3;
DROP DATABASE temp_db;