RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.
INSERT

1. Overview

insert-stmt:

WITH RECURSIVE common-table-expression , REPLACE INSERT OR ROLLBACK INTO ABORT FAIL IGNORE REPLACE schema-name . table-name AS alias ( column-name ) , VALUES ( expr ) , , upsert-clause select-stmt upsert-clause DEFAULT VALUES returning-clause

common-table-expression:

expr:

returning-clause:

select-stmt:

upsert-clause:

Оператор INSERT прибывает в три канонических формах.

  1. INSERT INTO table VALUES(...);

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

  2. 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.

  3. 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".