Вставка записей

Для добавления записей в таблицу используется оператор 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.