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

RENAME 语句可用于重命名数据库、表或字典,支持在单个查询中重命名多个实体。

注意

具有多个实体的RENAME查询是非原子操作。

RENAME DATABASE

重命名数据库。

语法

RENAME DATABASE [databaseIdentifier] TO [databaseIdentifier2] [,...] 

示例

-- 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 (
  id UInt32,
  name String DEFAULT '',
  CONSTRAINT constraint1 CHECK id > 10
)
ENGINE=MergeTree
ORDER BY id;

-- 4. 若目标数据库 sample1 已存在,则先删除,避免重命名冲突
DROP database IF EXISTS sample_db1;

-- 5. 将数据库 sample 重命名为 sample_db1
RENAME DATABASE sample_db to sample_db1;

-- 6. 将 sample1 库中的表 sample_db1.sample_table 重命名为 sample_db1.sample_table1
RENAME TABLE sample_db1.sample_table to sample_db1.sample_table1;

RENAME TABLE

重命名一个或多个表。
重命名表是一个轻量级的操作。 如果在 TO 子句中指定了不同的数据库名称,该表将被移动到目标数据库。但是源数据库和目标数据库的存储目录必须位于同一文件系统中,否则操作将失败并返回错误。
当在一个 RENAME TABLE 语句中同时重命名多个表时,该操作不是原子性的。操作可能部分成功。如果操作在执行过程中中断,只有部分表会被成功重命名/移动。在其他会话查询正在被重命名的表时,可能会遇到 Table ... does not exist ... 或类似错误,直到所有重命名操作完成。

语法

RENAME TABLE
  [tableIdentifier] TO [tableIdentifier],
  [tableIdentifier] TO [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 sample_db.sample_table ON CLUSTER sample_cluster (
    `a` Int8,
    `b` String,
    `c` Date
)
ENGINE = `MergeTree`
ORDER BY (`a`)

-- 4. 将 sample 库中的表 sample_db.sample_table 重命名为 sample_db.new_sample_table
RENAME TABLE sample_db.sample_table to sample_db.new_sample_table

RENAME DICTIONARY

重命名一个或多个字典。 此查询可用于在数据库之间移动字典。

语法

RENAME DICTIONARY
  [databaseIdentifier.]dict_name TO [databaseIdentifier.]dict_name
  [, ...];

示例

  • 单个字典重命名
    db0 数据库中的字典 dict_A 重命名为 db1 数据库中的 dict_B

    -- 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. 若目标字典 new_sample_dict 已存在,则先删除,避免重命名冲突
    DROP DICTIONARY IF EXISTS sample_db.new_sample_dict;
    
    -- 4. 重命名字典
    RENAME DICTIONARY sample_db.sample_dict TO sample_db.new_sample_dict;
    
  • 多个字典重命名
    db0 中的 dict_A 重命名为 db1.dict_B,同时将 db2 中的 dict_C 重命名为 db2.dict_D

    -- 1. 创建库
    CREATE DATABASE IF NOT EXISTS sample_db ON CLUSTER sample_cluster;
    
    -- 2. 创建字典 1
    CREATE DICTIONARY IF NOT EXISTS sample_db.sample_dict1 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. 创建字典 2
    CREATE DICTIONARY IF NOT EXISTS sample_db.sample_dict2 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);
    
    -- 4. 若目标字典 new_sample_dict 已存在,则先删除,避免重命名冲突
    DROP DICTIONARY IF EXISTS sample_db.new_sample_dict1;
    DROP DICTIONARY IF EXISTS sample_db.new_sample_dict2;
    
    -- 5. 重命名多个字典
    RENAME DICTIONARY 
       sample_db.sample_dict1 TO sample_db.new_sample_dict1, 
       sample_db.sample_dict2 TO sample_db.new_sample_dict2;