В этом туториале рассказывается, как вставлять, обновлять и удалять данные таблицы.
Вставка данных
Когда таблица создается, она не содержит данных. Первое, что нужно сделать перед тем, как база данных станет полезной, — это вставить в нее данные. Данные вставляются по одной строке за раз. Вы также можете вставить более одной строки в одну команду, но невозможно вставить что-то, что не является полной строкой. Даже если известны только значения некоторых столбцов, необходимо создать полную строку.
Чтобы создать новую строку, используйте команду INSERT . Команде требуются имя таблицы и значения столбца.
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');
Вторая форма — это расширение PostgreSQL . Он заполняет столбцы слева столько значений, сколько указано, а остальные будут по умолчанию.
Для ясности вы также можете явно запросить значения по умолчанию для отдельных столбцов или для всей строки:
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-запросов для вычисления вставляемых строк.
Обновление данных
Изменение данных, которые уже находятся в базе данных, называется обновлением. Вы можете обновить отдельные строки, все строки в таблице или подмножество всех строк. Каждый столбец можно обновлять отдельно; другие столбцы не затрагиваются.
Чтобы обновить существующие строки, используйте команду UPDATE . Для этого требуется три элемента информации:
- Имя таблицы и столбца для обновления
- Новое значение столбца
- Какие строки обновить
SQL, как правило, не предоставляет уникальный идентификатор для строк. Поэтому не всегда можно напрямую указать, какую строку следует обновить. Вместо этого вы указываете, каким условиям должна соответствовать строка, чтобы ее можно было обновить. Только если у вас есть первичный ключ в таблице (независимо от того, объявили вы его или нет), вы можете надежно обращаться к отдельным строкам, выбирая условие, соответствующее первичному ключу. Графические инструменты доступа к базе данных полагаются на этот факт, чтобы позволить вам обновлять строки по отдельности.
Например, эта команда обновляет все продукты с ценой 5 до цены 10:
UPDATE products SET price = 10 WHERE price = 5;
Это может привести к обновлению нуля, одной или многих строк. Попытка обновления, которая не соответствует ни одной строке, не является ошибкой.
Давайте рассмотрим эту команду подробно. Сначала идет ключевое слово UPDATE
, за которым следует имя таблицы. Как обычно, имя таблицы может быть дополнено схемой, в противном случае оно ищется в пути. Далее идет ключевое слово SET
, за которым следует имя столбца, знак равенства и новое значение столбца. Новое значение столбца может быть любым скалярным выражением, а не только константой. Например, если вы хотите поднять цену на все товары на 10%, вы можете использовать:
UPDATE products SET price = price * 1.10;
Как видите, выражение для нового значения может ссылаться на существующее значение(я) в строке. Мы также исключили этот WHERE
пункт. Если он опущен, это означает, что все строки в таблице обновлены. Если оно присутствует, WHERE
обновляются только те строки, которые соответствуют условию. Обратите внимание, что знак равенства в SET
предложении — это присваивание, а знак равенства в WHERE
предложении — сравнение, но это не создает никакой двусмысленности. Конечно, WHERE
условие не обязательно должно быть проверкой на равенство. Доступны многие другие операторы. Но выражение должно оцениваться как логический результат.
Вы можете обновить более одного столбца в UPDATE
команде, указав более одного назначения в SET
предложении. Например:
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;
Удаление данных
До сих пор мы объясняли, как добавлять данные в таблицы и как изменять данные. Осталось обсудить, как удалить данные, которые больше не нужны. Точно так же, как добавление данных возможно только целыми строками, вы можете удалить только целые строки из таблицы. В предыдущем разделе мы объяснили, что SQL не позволяет напрямую обращаться к отдельным строкам. Следовательно, удаление строк может быть выполнено только путем указания условий, которым должны соответствовать удаляемые строки. Если у вас есть первичный ключ в таблице, вы можете указать точную строку. Но вы также можете удалить группы строк, соответствующих условию, или вы можете удалить все строки в таблице сразу.
Вы используете команду DELETE для удаления строк; синтаксис очень похож на команду UPDATE . Например, чтобы удалить из таблицы товаров все строки с ценой 10, используйте:
DELETE FROM products WHERE price = 10;
Если просто написать:
DELETE FROM products;
то все строки в таблице будут удалены! Внимание программист.
Возврат данных из измененных строк
Иногда полезно получать данные из измененных строк во время манипулирования ими. Все команды INSERT
, UPDATE
и DELETE
имеют необязательное RETURNING
предложение, поддерживающее это. Использование RETURNING
позволяет избежать выполнения дополнительного запроса к базе данных для сбора данных и особенно ценно, когда в противном случае было бы трудно надежно идентифицировать измененные строки.
Допустимое содержимое RETURNING
предложения такое же, как и SELECT
в списке вывода команды. Он может содержать имена столбцов целевой таблицы команды или выражения значений, использующие эти столбцы. Распространенным сокращением является RETURNING *
, который выбирает все столбцы целевой таблицы по порядку.
В INSERT
файле доступными данными RETURNING
является строка в том виде, в каком она была вставлена. Это не так полезно в тривиальных вставках, так как это просто повторит данные, предоставленные клиентом. Но это может быть очень удобно, когда вы полагаетесь на вычисленные значения по умолчанию. Например, при использовании serial
столбца для предоставления уникальных идентификаторов RETURNING
может возвращаться идентификатор, присвоенный новой строке:
CREATE TABLE users (firstname text, lastname text, id serial primary key);
INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool') RETURNING id;
Предложение RETURNING
также очень полезно с INSERT ... SELECT
.
В UPDATE
объекте доступными данными RETURNING
является новое содержимое измененной строки. Например:
UPDATE products SET price = price * 1.10
WHERE price <= 99.99
RETURNING name, price AS new_price;
В команде DELETE данные, выдаваемые в RETURNING, образуются содержимым удалённой строки. Например:
DELETE FROM products
WHERE obsoletion_date = 'today'
RETURNING *;
Если для целевой таблицы заданы триггеры, в RETURNING выдаются данные из строки, изменённой триггерами. Таким образом, RETURNING часто применяется и для того, чтобы проверить содержимое столбцов, изменяемых триггерами.
0 комментариев