Замена данных. Команда REPLACE

Последнее обновление: 27.11.2021

Команда REPLACE по сути является сокращением от INSERT OR REPLACE. Ее идея состоит в следующем. Пи вставке данных может нарушаются ограничения UNIQUE или PRIMARY KEY, например, когда мы пытаемся добавить для столбца, который должен иметь уникальные значения, данные, которые уже есть в таблице. Этот конфликт ограничений призвана разрешить команда REPLACE.

Эта команда сначала удаляет строку, которая вызвала конфликт на уникальность данных, и затем вместо нее вставляет новую строку. То есть фактически все выглядит как замена строки.

Если происходит конфликт с ограничением NOT NULL (в столбец, для которого задано ограничение NOT NULL, вставляется значение NULL), команда REPLACE заменяется вставляемое значение NULL значением по умолчанию, которое принято для этого столбца. Если для столбца не установлено значение по умолчанию, то выполнение запроса отменяется.

Если конфликтов с ограничениями не происходит, то команда REPLACE по сути действует аналогично команде INSERT.

Команда REPLACE имеет следующий формальный синтаксис:

INSERT OR REPLACE INTO table(столбец1, столбец2, ... столбецN)
VALUES(значение1, значение2, ... значениеN);

Вместо INSERT OR REPLACE можно писать просто REPLACE.

Например, возьмем следующую таблицу users, которая хранит пользователей:

DROP TABLE IF EXISTS users;
CREATE TABLE users
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
	name TEXT UNIQUE,
    age INTEGER DEFAULT 18
);
INSERT INTO users (name, age) VALUES 
('Tom', 37),
('Bob', 41),
('Sam', 29);

Здесь для столбца name задано ограничение UNIQUE, то есть не может быть двух строк, у которых в этом столбце будет одно и то же значение.

Посмотрим эту команду в деле. Выше в определении таблице были добавлены начальные данные, где для одного из пользователей задано имя "Tom". И вначале попробуем добавить нового пользователя с тем же именем с помощью стандартной команды INSERT:

INSERT INTO users (name, age) VALUES ('Tom', 22);
Команда REPLACE OR INSERT в SQLite

И при выполнении мы столкнемся с ошибкой, которая говорит, данный запрос нарушает ограничение по уникальности столбца name.

Теперь попробуем добавить те же самые данные, только с помощью команды REPLACE:

REPLACE INTO users (name, age) VALUES ('Tom', 22);

Эта команда удалить ранее добавленную стоку, где name = "Tom', и вставит текущие данные:

Команда REPLACE INTO в SQLite
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850