ВСТАВИТЬ
1. Обзор
Оператор INSERT представлен в трёх основных формах.
-
INSERT INTO таблица VALUES(...);
Первая форма (с ключевым словом "VALUES") создаёт одну или несколько новых строк в существующей таблице. Если список имя_столбца после имя_таблицы опущен, то количество значений, вставляемых в каждую строку, должно совпадать с количеством столбцов в таблице. В этом случае результат вычисления левого выражения из каждого элемента списка VALUES вставляется в левый столбец каждой новой строки, и так далее для каждого последующего выражения. Если список имя_столбца указан, то количество значений в каждом элементе списка VALUE должно соответствовать количеству указанных столбцов. Каждый из названных столбцов новой строки заполняется результатами вычисления соответствующего выражения VALUES. Столбцы таблицы, не присутствующие в списке столбцов, заполняются значением по умолчанию столбца (указанным в операторе CREATE TABLE), или NULL, если значение по умолчанию не указано.
-
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.
-
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