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 BE. Она заполняет столбцы слева по числу значений, которые указаны, а значения в остальных столбцах устанавливаются по умолчанию.
Для ясности вы также можете явно запросить значения по умолчанию, как для отдельных столбцов, так и для всей строки:
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 приведена дополнительная информация о повышении производительности пакетной загрузки.