Вставка записей
Для добавления записей в таблицу используется оператор INSERT
.
Существует несколько форм записи оператора. Рассмотрим основные варианты.
Явное указание значений
INSERT INTO <Имя таблицы> [(<column_list>)] VALUES(<value_list>)
Вставляет строку в таблицу с указанными значениями.
В списке VALUES
должны быть указаны значения всех столбцов в списке столбцов
Если список столбцов отсутствует, должны быть указаны все столбцы таблицы кроме вычисляемых.
Например,
INSERT INTO cars (make, model, byyear) VALUES ('Ford', 'T', 1908);
INSERT INTO cars VALUES ('Ford', 'T', 1908, 'USA', 850);
Вставка результатов запроса
INSERT INTO <Имя таблицы> [(<column_list>)] SELECT ...
В этом случае выходные столбцы оператора SELECT
, должны предоставить значения для
каждого целевого столбца в списке столбцов, в том же порядке и совместимого типа. Если
список столбцов отсутствует, то значения должны быть предоставлены для каждого столбца
таблицы или представления (исключая вычисляемые столбцы).
Например,
INSERT INTO cars (make, model, byyear) SELECT make, model, byyear FROM new_cars;
INSERT INTO cars SELECT * FROM new_cars;
INSERT INTO numbers(num)
WITH RECURSIVE r(n) AS (
SELECT 1 FROM rdb$database
UNION ALL
SELECT n+1 FROM r where n < 100
)
SELECT n FROM r
Конечно, имена столбцов в таблице источнике не обязательно должны быть такими же, как и
в таблице приёмнике.
Любой тип оператора SELECT
разрешён, пока его выходные столбцы точно соответствуют
столбцам вставки по числу и типу. Типы не должны быть точно такими же, но они должны быть
совместимыми по присваиванию.
Добавление строки со значениями по умолчанию
INSERT INTO <Имя таблицы> DEFAULT VALUES
Предложение DEFAULT VALUES
позволяет вставлять записи без указания значений вообще.
Это возможно, только если для каждого NOT NULL
поля и полей,
на которые наложены другие ограничения, или имеются допустимые объявленные значения по умолчанию,
или эти значения устанавливаются в BEFORE INSERT
триггере.
Например:
INSERT INTO journal DEFAULT VALUES RETURNING entry_id
Получение вставленных значений
INSERT ... [RETURNING <returning_list> [INTO <variables>]]
Оператор INSERT
вставляющий только одну строку может включать необязательное
предложение RETURNING
для возврата значений из вставленной строки. Если предложение
указано, то оно может содержать любые столбцы, указанные в операторе, или другие столбцы
и выражения. Возвращаемые значения содержат все изменения, произведённые в триггерах
BEFORE
.