Атомарно меняет имена двух таблиц или словарей местами.
Эту задачу также можно выполнить с помощью запроса RENAME, используя временное имя, однако в этом случае операция не будет атомарной.
Запрос EXCHANGE поддерживается только движками баз данных Atomic и Shared.
Синтаксис
EXCHANGE TABLES|DICTIONARIES [db0.]name_A AND [db1.]name_B [ON CLUSTER cluster]
Меняет местами имена двух таблиц.
Синтаксис
EXCHANGE TABLES [db0.]table_A AND [db1.]table_B [ON CLUSTER cluster]
EXCHANGE НЕСКОЛЬКИХ ТАБЛИЦ
Вы можете обменять несколько пар таблиц в рамках одного запроса, разделив их запятыми.
При обмене нескольких пар таблиц операции выполняются последовательно, а не атомарно. Если во время выполнения произойдёт ошибка, некоторые пары таблиц могут быть уже обменены, а другие — нет.
Пример
-- Создать таблицы
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;
-- Обменять две пары таблиц в одном запросе
EXCHANGE TABLES a AND b, c AND d;
SHOW TABLE a;
SHOW TABLE b;
SHOW TABLE c;
SHOW TABLE d;
-- Теперь таблица 'a' имеет структуру 'b', а таблица 'b' имеет структуру 'a'
┌─statement──────────────┐
│ CREATE TABLE default.a↴│
│↳( ↴│
│↳ `b` UInt8 ↴│
│↳) ↴│
│↳ENGINE = Memory │
└────────────────────────┘
┌─statement──────────────┐
│ CREATE TABLE default.b↴│
│↳( ↴│
│↳ `a` UInt8 ↴│
│↳) ↴│
│↳ENGINE = Memory │
└────────────────────────┘
-- Теперь таблица 'c' имеет структуру 'd', а таблица 'd' имеет структуру 'c'
┌─statement──────────────┐
│ CREATE TABLE default.c↴│
│↳( ↴│
│↳ `d` UInt8 ↴│
│↳) ↴│
│↳ENGINE = Memory │
└────────────────────────┘
┌─statement──────────────┐
│ CREATE TABLE default.d↴│
│↳( ↴│
│↳ `c` UInt8 ↴│
│↳) ↴│
│↳ENGINE = Memory │
└────────────────────────┘
Меняет имена двух словарей местами.
Синтаксис
EXCHANGE DICTIONARIES [db0.]dict_A AND [db1.]dict_B [ON CLUSTER cluster]
См. также
Последнее изменение 10 июня 2026 г.