Перейти к основному содержанию
Перейти к основному содержанию

Оператор EXCHANGE

Атомарно обменивает именами две таблицы или два словаря. Эту задачу также можно выполнить с помощью запроса RENAME с использованием временного имени, но в этом случае операция не является атомарной.

:::note
Запрос EXCHANGE поддерживается только движками баз данных Atomic и Shared. :::

Синтаксис

EXCHANGE TABLES|DICTIONARIES [db0.]name_A AND [db1.]name_B [ON CLUSTER cluster]

EXCHANGE TABLES

Обменивает имена двух таблиц.

Синтаксис

EXCHANGE TABLES [db0.]table_A AND [db1.]table_B [ON CLUSTER cluster]

ОБМЕН НЕСКОЛЬКИМИ ТАБЛИЦАМИ

Вы можете обменять несколько пар таблиц в рамках одного запроса, разделив их запятыми.

Примечание

При обмене несколькими парами таблиц операции обмена выполняются последовательно, а не атомарно. Если во время операции произойдёт ошибка, некоторые пары таблиц могут быть обменены, а другие — нет.

Пример

-- Создать таблицы
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

Меняет местами имена двух словарей.

Синтаксис

EXCHANGE DICTIONARIES [db0.]dict_A AND [db1.]dict_B [ON CLUSTER cluster]

См. также