Pular para o conteúdo principal
Troca, de forma atômica, os nomes de duas tabelas ou dicionários. Essa tarefa também pode ser realizada com uma consulta RENAME usando um nome temporário, mas, nesse caso, a operação não é atômica.
A consulta EXCHANGE é compatível apenas com os motores de banco de dados Atomic e Shared.
Sintaxe
EXCHANGE TABLES|DICTIONARIES [db0.]name_A AND [db1.]name_B [ON CLUSTER cluster]

EXCHANGE TABLES

Troca os nomes de duas tabelas. Sintaxe
EXCHANGE TABLES [db0.]table_A AND [db1.]table_B [ON CLUSTER cluster]

EXCHANGE MÚLTIPLAS TABELAS

Você pode trocar vários pares de tabelas em uma única consulta, separando-os por vírgulas.
Ao trocar vários pares de tabelas, as trocas são realizadas sequencialmente, e não de forma atômica. Se ocorrer um erro durante a operação, alguns pares de tabelas podem já ter sido trocados, enquanto outros não.
Exemplo
Query
-- Criar tabelas
CREATE TABLE a (a UInt8) ENGINE=Memory;
CREATE TABLE b (b UInt8) ENGINE=Memory;
CREATE TABLE c (c UInt8) ENGINE=Memory;
CREATE TABLE d (d UInt8) ENGINE=Memory;

-- Trocar dois pares de tabelas em uma única consulta
EXCHANGE TABLES a AND b, c AND d;

SHOW TABLE a;
SHOW TABLE b;
SHOW TABLE c;
SHOW TABLE d;
Response
-- Agora a tabela 'a' tem a estrutura de 'b', e a tabela 'b' tem a estrutura de 'a'
┌─statement──────────────┐
CREATE TABLE default.a↴│
│↳(                     ↴│
│↳    `b` UInt8         ↴│
│↳)                     ↴│
│↳ENGINE = Memory        │
└────────────────────────┘
┌─statement──────────────┐
CREATE TABLE default.b↴│
│↳(                     ↴│
│↳    `a` UInt8         ↴│
│↳)                     ↴│
│↳ENGINE = Memory        │
└────────────────────────┘

-- Agora a tabela 'c' tem a estrutura de 'd', e a tabela 'd' tem a estrutura de 'c'
┌─statement──────────────┐
CREATE TABLE default.c↴│
│↳(                     ↴│
│↳    `d` UInt8         ↴│
│↳)                     ↴│
│↳ENGINE = Memory        │
└────────────────────────┘
┌─statement──────────────┐
CREATE TABLE default.d↴│
│↳(                     ↴│
│↳    `c` UInt8         ↴│
│↳)                     ↴│
│↳ENGINE = Memory        │
└────────────────────────┘

EXCHANGE DICTIONARIES

Troca os nomes de dois dicionários. Sintaxe
EXCHANGE DICTIONARIES [db0.]dict_A AND [db1.]dict_B [ON CLUSTER cluster]
Veja também
Última modificação em 10 de junho de 2026