INSERT VALUES
Содержание раздела
Запрос вставляет записи в логической таблицу или standalone-таблицу.
Синтаксис вставки в standalone-таблицу подразумевает использование внешней writable-таблицы, которая указывает на standalone-таблицу. При вставке данных в standalone-таблицу нужно учитывать ее ограничения в конкретной СУБД.
Если в логической таблице уже есть запись со значением первичного ключа, указанным в запросе, запись обновляется; иначе добавляется новая запись. Новые и существующие записи заполняются одинаково: поля, указанные в запросе, заполняются значениями из запроса, а пропущенные поля — значениями по умолчанию.
Вставка данных в логические и материализованные представления недоступна.
Запрос поддерживается для ADB, ADQM и ADP.
В отличие от UPSERT VALUES, запрос INSERT VALUES
полностью обновляет существующую запись. Для частичного обновления существующих записей следует использовать запрос UPSERT VALUES.
Для обновления большого объема данных следует использовать загрузку данных.
Запрос обрабатывается в порядке, описанном в разделе Порядок обработки запросов на обновление данных.
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Месторасположение данных логической таблицы можно задавать запросами CREATE TABLE и DROP TABLE с ключевым словом DATASOURCE_TYPE
.
Записи, вставленные в логическую таблицу, добавляются как горячие записи. При фиксации изменений записи становятся актуальными, а предыдущие актуальные записи — архивными. Подробнее о версионировании см. в разделе Версионирование данных.
Незавершенную операцию по вставке данных можно перезапустить, повторив исходный запрос с ключевым словом RETRY. Подробнее обо всех способах обработки незавершенных операций см. в разделе Управление операциями записи.
Синтаксис
Вставка данных во все столбцы таблицы:
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
-
Имя таблицы, в которую вставляются данные. Возможные значения:
- имя логической таблицы,
- имя внешней writable-таблицы, указывающей на нужную standalone-таблицу.
column_list
-
Список имен столбцов указанной таблицы. Имена перечисляются в круглых скобках через запятую. Список опционален, если количество и порядок вставляемых значений (в списке
value_list_N
) соответствуют количеству и порядку столбцов в таблице. value_list_N
-
Список вставляемых значений. Значения указываются в круглых скобках через запятую. Каждый такой список — это строка, вставляемая в таблицу.
Ключевое слово RETRY
Ключевое слово перезапускает обработку незавершенной операции записи, созданной запросом INSERT VALUES
. Пример запроса см. ниже. Список незавершенных операций можно получить с помощью запроса GET_WRITE_OPERATIONS.
Если ключевое слово не указано, система создает новую операцию и обрабатывает ее.
Ключевое слово RETRY
недоступно в запросах на вставку записей в standalone-таблицу.
Горячую дельту невозможно закрыть или откатить, пока в ней есть незавершенные операции записи.
Ограничения
- Вставка данных в логическую таблицу возможна только при наличии открытой дельты (см. BEGIN DELTA).
- Не допускается параллельное выполнение идентичных запросов.
Примеры
Вставка данных во все столбцы логической таблицы
-- выбор логической базы данных 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;