Оператор INSERT прибывает в три канонических формах.
INSERT INTO table VALUES(...);
Первая форма (с ключевым словом "VALUES") создает одну
или несколько новых строк в существующей таблице. Если
column-name после
table-name опущен, количество значений,
вставленных в каждую строку, должно совпасть с количеством колонок в
таблице. В этом случае результат оценки крайнего левого выражения от каждого
термина списка VALUES вставляется в крайний левый столбец каждой новой
строки и т.д. для каждого последующего выражения. Если список
column-name есть, то количество значений
в каждом термине списка VALUE должно соответствовать количеству указанных
колонок. Каждая из названных колонок новой строки
наполнена результатами оценки соответствующего выражения VALUES.
Столбцы таблицы, которые не появляются в списке столбцов, наполнены
значением столбца по умолчанию
(определено как часть CREATE TABLE)
или NULL, если никакое
значение по умолчанию
не определяется.
INSERT INTO table 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 table DEFAULT VALUES;
Третья форма оператора INSERT с DEFAULT VALUES.
INSERT ... DEFAULT VALUES вставляет единственную новую строку
в названную таблицу. Каждая колонка новой строки наполнена
значением по умолчанию
или NULL, если никакое значение по умолчанию не определяется как часть
определения столбца в CREATE TABLE.
upsert-clause
не поддерживается после DEFAULT VALUES.
Первое ключевое слово "INSERT" может быть заменено
"REPLACE" или "INSERT OR action", чтобы определить альтернативный
ограничительный алгоритм разрешения конфликтов
, чтобы использовать во время команды INSERT. Для совместимости с MySQL
анализатор позволяет использование единственного ключевого слова
REPLACE как псевдонима для
"INSERT OR REPLACE".
Опциональный префикс "schema-name." в
table-name
поддерживается только для операторов INSERT верхнего уровня.
Имя таблицы должно быть неквалифицировано для операторов INSERT, которые
происходят в рамках CREATE TRIGGER.
Точно так же форма "DEFAULT VALUES" оператора INSERT поддерживается
только для операторов INSERT верхнего уровня, а не для
операторов INSERT в триггерах.
Опциональная фраза "AS alias"
обеспечивает альтернативное название таблицы, в которую вставляется
содержание. Имя псевдонима может использоваться в пунктах WHERE и SET в
UPSERT. Если нет никакого
upsert-clause,
alias бессмыслен, но также и безопасен.
Смю описание UPSERT
для дополнительного синтаксиса, который может заставить INSERT вести себя как
UPDATE, если INSERT иначе нарушил бы ограничение уникальности.
upsert clause не позволен в
"INSERT ... DEFAULT VALUES".