CREATE DATABASE(或 CREATE SCHEMA)语句用于在 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 中创建表 t2CREATE TABLE temp_db.t2 (x int, y int);-- 方法 2:先切换数据库上下文,然后在 temp_db 中创建表 t3USE 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 emptySHOW 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;