Spec-Zone.ru › SQLite

ВСТАВИТЬ

1. Обзор

insert-stmt:

С РЕКУРСИВНО common-table-expression , ЗАМЕНИТЬ ВСТАВИТЬ ИЛИ ВОЗВРАТ В ПРЕРВАТЬ НЕЛЬЗЯ ПРОИГНОРИРОВАТЬ ЗАМЕНИТЬ имя-схемы . имя-таблицы КАК псевдоним ( имя-столбца ) , значения
( expr ) , , upsert-оператор запрос-выбор upsert-оператор DEFAULT значения returning-оператор

общее выражение с таблицей:

имя-таблицы ( имя-колонки ) КАК НЕ МАТЕРИАЛИЗОВАННЫЙ ( запрос-выбор ) ,

выражение:

значение параметр_связывания имя_схемы . имя_таблицы . имя_столбца унарный_оператор выражение выражение бинарный_оператор выражение имя_функции ( аргументы_функции ) оператор_фильтрации оператор_над_строкой ( выражение ) , ПРЕОБРАЗОВАНИЕ ( выражение КАК имя_типа
) expr COLLATE collation-name expr НЕ ПОДОБНО GLOB REGEXP СООТВЕТСТВИЕ expr expr ESCAPE expr expr ISNULL NOTNULL НЕ NULL expr ЕСТЬ НЕ РАЗЛИЧНЫЕ ИЗ expr
expr НЕТ BETWEEN expr AND expr expr НЕТ IN ( select-stmt ) expr , schema-name . table-function ( expr ) table-name , НЕТ EXISTS ( select-stmt )
CASE expr WHEN expr THEN expr ELSE expr END raise-function

оператор фильтрации:

ФИЛЬТР ( ГДЕ выражение )

аргументы функции:

DISTINCT expr , * ORDER BY ordering-term ,

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

literal-value:

CURRENT_TIMESTAMP числовое_литерал строковая_литерал байтовый_литерал NULL ИСТИНА ЛОЖЬ ТЕКУЩЕЕ_ВРЕМЯ ТЕКУЩАЯ_ДАТА

оператор over:

СВЕРХУ имя_окна ( основное_имя_окна РАЗДЕЛЁННЫЙ ПО выражение , ПОРЯДОК ПО имя_порядка , спецификация_фрейма )

спецификация_фрейма:

ГРУППЫ МЕЖДУ НЕОГРАНИЧЕННАЯ ПРЕДШЕСТВУЮЩАЯ И НЕОГРАНИЧЕННАЯ СЛЕДУЮЩАЯ ДИАПАЗОН СТРОКИ НЕОГРАНИЧЕННАЯ ПРЕДШЕСТВУЮЩАЯ expr ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА expr ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА expr СЛЕДУЮЩАЯ expr ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА expr СЛЕДУЮЩАЯ
ИСКЛЮЧИТЬ ТЕКУЩИЙ СТРОКА ИСКЛЮЧИТЬ ГРУППА ИСКЛЮЧИТЬ СВЯЗИ ИСКЛЮЧИТЬ НЕТ ДРУГИЕ

ordering-term:

expr COLLATE имя_сортировки УБЫВАНИЕ ВОЗРАСТАНИЕ NULL ПЕРВЫЙ NULL ПОСЛЕДНИЙ

raise-function:

RAISE ( ROLLBACK , error-message ) IGNORE ABORT FAIL

имя типа:

имя ( число со знаком , число со знаком ) ( число со знаком )

число со знаком:

+ числовое значение -

оператор возврата:

ВОЗВРАЩАЯ expr КАК колонка-псевдоним * ,

запрос:

С РЕКУРСИВНЫЙ общий-выражение-с-таблицей , ВЫБЕРИТЕ УНИКАЛЬНЫЕ столбец-результата , ВСЕ ИЗ таблица-или-подзапрос часть-соединения , ГДЕ выражение СГРУППИРОВАТЬ ПО выражение ПРИ выражение ,
WINDOW window-name AS window-defn , ЗНАЧЕНИЯ ( expr ) , , составной-оператор select-core СОРТИРОВАТЬ ПО ОГРАНИЧИТЬ expr элемент-сортировки , СМЕЩЕНИЕ expr , expr

составной-оператор:

ОБЪЕДИНЕНИЕ ОБЪЕДИНЕНИЕ ПЕРЕСЕЧЕНИЕ ИСКЛЮЧЕНИЕ ВСЕ

оператор_соединения:

table-or-subquery join-operator table-or-subquery join-constraint

join-constraint:

USING ( column-name ) , ON expr

join-operator:

NATURAL LEFT OUTER JOIN , RIGHT FULL INNER CROSS

join-operator:

NATURAL LEFT OUTER JOIN , <polygon class="fill" points="3
expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

result-column:

expr AS column-alias * имя_таблицы . *

таблица или подзапрос:

schema-name . table-name AS table-alias INDEXED BY index-name НЕ INDEXED table-function-name ( expr ) , AS table-alias ( select-stmt ) ( table-or-subquery ) ,
join-clause

window-defn:

( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

frame-spec:

ГРУППЫ МЕЖДУ НЕОГРАНИЧЕННАЯ ПРЕДШЕСТВУЮЩАЯ И НЕОГРАНИЧЕННАЯ СЛЕДУЮЩАЯ ОБЛАСТЬ СТРОКИ НЕОГРАНИЧЕННАЯ ПРЕДШЕСТВУЮЩАЯ выраж ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА выраж ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА выраж СЛЕДУЮЩАЯ выраж ПРЕДШЕСТВУЮЩАЯ ТЕКУЩАЯ СТРОКА выраж СЛЕДУЮЩАЯ
Исключить Текущий Строка Исключить Группа Исключить Связи Исключить Нет Другие

upsert-оператор:

ON CONFLICT ( indexed-column ) WHERE expr DO , конфликт целевой столбец ОБНОВИТЬ УСТАНОВИТЬ список имён столбцов = expr WHERE expr НИЧЕГО , имя_столбца

список имён столбцов:

( имя_столбца ) ,

индексированный столбец:

имя_столбца COLLATE имя_сопоставления DESC выражение ASC

Оператор INSERT представлен в трёх основных формах.

  1. INSERT INTO таблица VALUES(...);

    Первая форма (с ключевым словом "VALUES") создаёт одну или несколько новых строк в существующей таблице. Если список имя_столбца после имя_таблицы опущен, то количество значений, вставляемых в каждую строку, должно совпадать с количеством столбцов в таблице. В этом случае результат вычисления левого выражения из каждого элемента списка VALUES вставляется в левый столбец каждой новой строки, и так далее для каждого последующего выражения. Если список имя_столбца указан, то количество значений в каждом элементе списка VALUE должно соответствовать количеству указанных столбцов. Каждый из названных столбцов новой строки заполняется результатами вычисления соответствующего выражения VALUES. Столбцы таблицы, не присутствующие в списке столбцов, заполняются значением по умолчанию столбца (указанным в операторе CREATE TABLE), или NULL, если значение по умолчанию не указано.

  2. INSERT INTO таблица SELECT ...;

    Вторая форма оператора INSERT содержит оператор SELECT вместо предложения VALUES. Новая запись вставляется в таблицу для каждой строки данных, возвращаемой в результате выполнения оператора SELECT. Если указан список столбцов, количество столбцов в результате SELECT должно совпадать с количеством элементов в списке столбцов. В противном случае, если список столбцов не указан, количество столбцов в результате SELECT должно совпадать с количеством столбцов в таблице. Любой оператор SELECT, включая составные SELECT и операторы SELECT с предложениями ORDER BY и/или LIMIT, может быть использован в операторе INSERT в этой форме.

    Для избежания неоднозначности синтаксического анализа, оператор SELECT всегда должен содержать предложение WHERE, даже если это предложение просто "WHERE true", если присутствует upsert-clause. Без предложения WHERE анализатор не знает, является ли токен "ON" частью условия соединения в SELECT или началом upsert-clause.

  3. INSERT INTO таблица DEFAULT VALUES;

    Третья форма оператора INSERT — с DEFAULT VALUES. Оператор INSERT ... DEFAULT VALUES вставляет одну новую строку в указанную таблицу. Каждый столбец новой строки заполняется своим значением по умолчанию или NULL, если значение по умолчанию не указано в определении столбца в операторе CREATE TABLE. upsert-clause не поддерживается после DEFAULT VALUES.

Изначальное ключевое слово "INSERT" может быть заменено на "REPLACE" или "INSERT OR действие" для указания альтернативного алгоритма разрешения конфликтов обработки конфликтов, используемого во время этого одного оператора INSERT. Для совместимости с MySQL анализатор допускает использование единственного ключевого слова REPLACE как псевдонима для "INSERT OR REPLACE".

Предварительный префикс "имя_схемы." для имя_таблицы поддерживается только для операторов INSERT верхнего уровня. Имя таблицы должно быть неквалифицированным для операторов INSERT, которые встречаются в операторах CREATE TRIGGER. Аналогично, форма оператора INSERT "DEFAULT VALUES" поддерживается только для операторов INSERT верхнего уровня, а не для операторов INSERT внутри триггеров.

Необязательная фраза "AS псевдоним" предоставляет альтернативное имя для таблицы, в которую вставляется содержимое. Имя псевдонима может быть использовано в предложениях WHERE и SET в UPSERT. Если нет upsert-clause, то псевдоним бесполезен, но также и безвреден.

См. отдельную документацию по UPSERT для дополнительного последующего синтаксиса, который может заставить оператор INSERT вести себя как UPDATE, если оператор INSERT в противном случае нарушает ограничение уникальности. Upsert-clause не разрешен в "INSERT ... DEFAULT VALUES".

Последнее изменение этой страницы: 2022-01-08 05:02:57 UTC

SQLite is in the Public Domain.
https://sqlite.org/lang_insert.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API