6.1. Вставка данных#

6.1. Вставка данных

6.1. Вставка данных

Когда создается таблица, она не содержит данных. Первое, что нужно сделать перед тем, как база данных сможет быть полезной, это вставить данные. Данные вставляются по одной строке за раз. Также можно вставить несколько строк одной командой, но невозможно вставить что-то, что не является полной строкой. Даже если вы знаете только некоторые значения столбцов, необходимо создать полную строку.

Для создания новой строки используйте команду INSERT. Команда требует указания имени таблицы и значений столбцов. Например, рассмотрим таблицу products из Глава 5:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
);

Пример команды для вставки строки будет таким:

INSERT INTO products VALUES (1, 'Cheese', 9.99);

Значения данных перечислены в порядке, в котором столбцы появляются в таблице, разделенные запятыми. Обычно значения данных будут литералами (константами), но также допускаются скалярные выражения.

Вышеуказанный синтаксис имеет недостаток в том, что вам нужно знать порядок столбцов в таблице. Чтобы избежать этого, вы также можете явно перечислить столбцы. Например, оба следующих команды имеют тот же эффект, что и предыдущая:

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);

Многие пользователи считают хорошей практикой всегда указывать имена столбцов.

Если у вас нет значений для всех столбцов, вы можете опустить некоторые из них. В этом случае столбцы будут заполнены своими значениями по умолчанию. Например:

INSERT INTO products (product_no, name) VALUES (1, 'Cheese');
INSERT INTO products VALUES (1, 'Cheese');

Вторая форма - это расширение Tantor SE. Она заполняет столбцы слева с количеством значений, которые указаны, а остальные значения будут установлены по умолчанию.

Для ясности вы также можете явно запросить значения по умолчанию, как для отдельных столбцов, так и для всей строки:

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;

Вы можете вставить несколько строк в одной команде:

INSERT INTO products (product_no, name, price) VALUES
    (1, 'Cheese', 9.99),
    (2, 'Bread', 1.99),
    (3, 'Milk', 2.99);

Также возможно вставить результат запроса (который может быть пустым, содержать одну строку или несколько строк):

INSERT INTO products (product_no, name, price)
  SELECT product_no, name, price FROM new_products
    WHERE release_date = 'today';

Это обеспечивает полную мощность механизма SQL-запросов (Глава 7) для вычисления строк, которые будут вставлены.

Подсказка

При вставке большого количества данных одновременно рассмотрите возможность использования команды COPY. Она не так гибка, как команда INSERT, но более эффективна. См. Раздел 14.4 для получения дополнительной информации о повышении производительности пакетной загрузки.