INSERT VALUES

Содержание раздела
  1. Синтаксис
    1. Ключевое слово RETRY
  2. Ограничения
    1. Ограничения выполнения
    2. Ограничения СУБД
    3. Ограничения сущностей
    4. Ограничения ключевых слов
  3. Примеры
    1. Вставка данных во все столбцы логической таблицы
    2. Вставка данных в указанные столбцы логической таблицы
    3. Вставка данных во все столбцы standalone-таблицы
    4. Вставка данных в указанные столбцы standalone-таблицы
    5. Перезапуск операции по вставке записей

Запрос вставляет записи в логической таблицу или standalone-таблицу.

Запрос предназначен для добавления новых записей в логические и standalone-таблицы, а также для обновления записей в логических таблицах. Если в логической таблице уже есть запись со значением первичного ключа, указанным в запросе, запись обновляется; иначе добавляется новая запись. Все поля, указанные в запросе, заполняются значениями из запроса, а пропущенные поля — значениями по умолчанию.

Запрос не предназначен для обновления записей в standalone-таблицах: результат такого обновления зависит от СУБД хранилища, в которую вставляется запись.

Запрос поддерживается для ADB, ADQM и ADP.

Синтаксис вставки в standalone-таблицу подразумевает использование внешней writable-таблицы, которая указывает на standalone-таблицу. При вставке данных в standalone-таблицу нужно учитывать ее ограничения в конкретной СУБД.

Запрос обрабатывается в порядке, описанном в разделе Порядок обработки запросов на обновление данных.

В ответе возвращается:

  • пустой объект ResultSet при успешном выполнении запроса;
  • исключение при неуспешном выполнении запроса.

Записи, вставленные в логическую таблицу, добавляются как горячие записи. При фиксации изменений записи становятся актуальными, а предыдущие актуальные записи — архивными. Подробнее о версионировании см. в разделе Версионирование данных.

Незавершенную операцию по вставке данных можно перезапустить, повторив исходный запрос с ключевым словом RETRY. Подробнее обо всех способах обработки незавершенных операций см. в разделе Управление операциями записи.

В отличие от UPSERT VALUES, запрос INSERT VALUES полностью обновляет существующие записи в логической таблице. Для частичного обновления существующих записей используйте запрос UPSERT VALUES.
Для обновления большого объема данных следует использовать загрузку данных.

Синтаксис

Вставка данных во все столбцы таблицы:

INSERT INTO [db_name.]table_name VALUES (value_list_1), (value_list_2), ...

Вставка данных в некоторые столбцы таблицы (с заполнением остальных столбцов значениями по умолчанию):

INSERT INTO [db_name.]table_name (column_list) VALUES (value_list_1), (value_list_2), ...

Перезапуск операции по вставке данных:

RETRY INSERT INTO [db_name.]table_name [(column_list)] VALUES (value_list_1), (value_list_2), ...

Параметры:

db_name

Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.

table_name

Имя таблицы, в которую вставляются данные. Возможные значения:

column_list

Список имен столбцов указанной таблицы. Имена перечисляются в круглых скобках через запятую. Список опционален, если количество и порядок вставляемых значений (в списке value_list_N) соответствуют количеству и порядку столбцов в таблице.

value_list_N

Список вставляемых значений. Значения указываются в круглых скобках через запятую. Каждый такой список — это строка, вставляемая в таблицу.

Ключевое слово RETRY

Ключевое слово перезапускает обработку незавершенной операции записи, созданной запросом INSERT VALUES. Пример запроса см. ниже. Список незавершенных операций можно получить с помощью запроса GET_WRITE_OPERATIONS.

Если ключевое слово не указано, система создает новую операцию и обрабатывает ее.

Ключевое слово RETRY недоступно в запросах к standalone-таблицам.

Ограничения

Ограничения выполнения

  • Не допускается параллельное выполнение идентичных запросов.

Ограничения СУБД

  • Запрос не поддерживает вставку данных в ADG.

Ограничения сущностей

  • Вставка данных в логические и материализованные представления недоступна.
  • Вставка данных в логическую таблицу возможна только при наличии открытой дельты (см. BEGIN DELTA).

Ограничения ключевых слов

  • Ключевое слово RETRY недоступно в запросах к standalone-таблицам.

Примеры

Вставка данных во все столбцы логической таблицы

-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;

-- открытие новой (горячей) дельты
BEGIN DELTA;

-- вставка трех записей в логическую таблицу sales
INSERT INTO sales 
VALUES (300011, '2021-08-21 23:34:10', 'ABC0001', 2, 123, 'Покупка по акции "1+1"'), 
       (300012, '2021-08-22 10:05:56', 'ABC0001', 1, 234, 'Покупка без акций'), 
       (300113, '2021-08-22 13:17:47', 'ABC0002', 4, 123, 'Покупка по акции "Лето"');

-- закрытие дельты (фиксация изменений)
COMMIT DELTA;

Вставка данных в указанные столбцы логической таблицы

-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;

-- открытие новой (горячей) дельты
BEGIN DELTA;

-- вставка двух записей в логическую таблицу sales (без опционального значения description)
INSERT INTO sales 
       (id, transaction_date, product_code, product_units, store_id)
VALUES (300014, '2021-08-23 09:34:10', 'ABC0003', 3, 123), 
       (300012, '2021-08-23 20:05:56', 'ABC0001', 6, 234);

-- закрытие дельты (фиксация изменений)
COMMIT DELTA;

Вставка данных во все столбцы standalone-таблицы

-- вставка записей в standalone-таблицу, на которую указывает внешняя writable-таблица agreements_ext_write_adp
INSERT INTO marketing.agreements_ext_write_adp 
VALUES (100, 111111, 'AB12345', '2022-02-01', '2022-02-02', '2024-02-02', 'Договор с ООО "Квадрат"'), 
       (101, 222222, 'AB67890', '2022-02-11', '2022-02-12', '2025-02-12', 'Договор с ООО "Круг"');

Вставка данных в указанные столбцы standalone-таблицы

-- вставка записей в standalone-таблицу, на которую указывает внешняя writable-таблица agreements_ext_write_adp,
--  без некоторых опциональных значений
INSERT INTO marketing.agreements_ext_write_adp (id, client_id, number, signature_date)
VALUES (102, 333333, 'AB11111', '2022-01-01');

Перезапуск операции по вставке записей

-- выбор логической базы данных sales в качестве базы данных по умолчанию
USE marketing;

-- открытие новой (горячей) дельты
BEGIN DELTA;

-- вставка записи в логическую таблицу sales (без опционального значения description)       
INSERT INTO sales
       (id, transaction_date, product_code, product_units, store_id)
VALUES (300015, '2021-10-15 10:11:01', 'ABC0003', 1, 123);

-- перезапуск обработки операции по вставке записи
RETRY INSERT INTO sales
       (id, transaction_date, product_code, product_units, store_id)
VALUES (300015, '2021-10-15 10:11:01', 'ABC0003', 1, 123); 

-- закрытие дельты (фиксация изменений)
COMMIT DELTA;