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;