You need to enable JavaScript to run this app.
导航
删除语句 (DROP)
最近更新时间:2025.08.14 10:17:09首次发布时间:2025.05.07 15:04:15
复制全文
我的收藏
有用
有用
无用
无用

DROP 语句可用于删除数据库、表、视图、字典,同时 ByteHouse 也支持通过 TRUNCATE TABLE 移除一个表所有数据。

删除数据库 (DROP DATABASE)

删除指定数据库。

语法

DROP DATABASE [IF EXISTS] [databaseIdentifier]

参数说明

参数

描述

IF EXISTS

  • 如果指定IF EXISTS,无论目标表是否存在,执行删除语句后系统都会返回成功。
  • 如果不指定IF EXISTS,当目标表不存在时,系统会返回ERROR: table "non_exist_table" does not exist报错。

databaseIdentifier

需要删除的表名称。

示例

-- 1. 创建数据库
CREATE DATABASE IF NOT EXIST sample_db ON CLUSTER sample_cluster;

-- 2. 删除数据库
DROP DATABASE sample_db ON CLUSTER CLUSTER sample_cluster;

删除表 (DROP TABLE)

删除指定表。

语法

DROP TABLE [IF EXISTS] [tableIdentifier]

示例

-- 1. 创建库
CREATE DATABASE IF NOT EXISTS sample_db ON CLUSTER sample_cluster;

-- 2. 删除现存表
DROP TABLE IF EXISTS sample_db.sample_table ON CLUSTER sample_cluster;

-- 3. 创建表
CREATE TABLE IF NOT EXISTS sample_db.sample_table ON CLUSTER sample_cluster(
    `order_by_column` String
)
ENGINE = MergeTree
ORDER BY (`order_by_column`);

-- 4. 删除表
DROP TABLE IF EXISTS sample_db.sample_table ON CLUSTER sample_cluster;

删除视图 (DROP VIEW)

删除视图。
DROP TABLE 的区别:

  • 虽然使用 DROP TABLE 命令也能删除视图,但 DROP VIEW 是删除视图的标准和推荐方式。
  • DROP VIEW 在执行删除操作前,会主动验证目标对象 ([db.]name) 是否为视图,避免因对象类型不匹配导致的错误。
  • 使用 DROP TABLE 删除视图时,则不会验证指定对象是否为视图。如果目标对象不是视图(例如是一个表),DROP TABLE 也会直接删除指定的对象;如果目标对象不存在,则报错。

语法

DROP VIEW [IF EXISTS] [db.]name 

示例

-- 1. 创建库
CREATE DATABASE IF NOT EXISTS sample_db ON CLUSTER sample_cluster;

-- 2. 删除现存表
DROP TABLE IF EXISTS sample_db.sample_table ON CLUSTER sample_cluster;

-- 3. 创建表
CREATE TABLE IF NOT EXISTS sample_db.sample_table ON CLUSTER sample_cluster(
    `order_by_column` String
)
ENGINE = MergeTree
ORDER BY (`order_by_column`);

-- 4. 创建视图
CREATE VIEW sample_view AS SELECT * FROM sample_db.sample_table

-- 5. 删除视图
DROP VIEW IF EXISTS sample_view ON CLUSTER sample_cluster

删除字典 (DROP DICTIONARY)

删除字典。

语法

DROP DICTIONARY [IF EXISTS] [db.]name

示例

-- 1. 创建库
CREATE DATABASE IF NOT EXISTS sample_db ON CLUSTER sample_cluster;

-- 2. 创建字典
CREATE DICTIONARY IF NOT EXISTS sample_db.sample_dict ON CLUSTER sample_cluster (
    `user_id` UInt64,
    `username` String,
    `age` UInt8 DEFAULT 0,
    `gender` UInt8 DEFAULT 0,
    `last_login` DateTime
)
PRIMARY KEY user_id
SOURCE(MySQL(
    host 'mysql_host.example.com'
    port 3306
    user 'dict_reader'
    password 'secure_password'
    db 'user_db'
    table 'users'
))
LAYOUT(FLAT())
LIFETIME(MIN 300 MAX 900);

-- 3. 删除字典
DROP DICTIONARY IF EXISTS sample_db.sample_dict ON CLUSTER sample_cluster;

TRUNCATE TABLE

移除一张表所有数据。

语法

TRUNCATE TABLE [IF EXISTS] [tableIdentifier]

示例

-- 1. 创建库
CREATE DATABASE IF NOT EXISTS sample_db ON CLUSTER sample_cluster;

-- 2. 删除现存表
DROP TABLE IF EXISTS sample_db.sample_table ON CLUSTER sample_cluster;

-- 3. 创建表
CREATE TABLE IF NOT EXISTS sample_db.sample_table ON CLUSTER sample_cluster(
    `order_by_column` String
)
ENGINE = MergeTree
ORDER BY (`order_by_column`);

-- 4. 插入数据
INSERT INTO sample_db.sample_table VALUES ('data_1'), ('data_2'), ('data_3');

-- 5. 验证数据插入
SELECT * FROM sample_db.sample_table;

-- 6. 移除表 sample_table 中的所有数据
TRUNCATE TABLE IF EXISTS sample_db.sample_table ON CLUSTER sample_cluster;

-- 7. 验证数据已清空
SELECT count(*) FROM sample_db.sample_table;