Добавление данных, оператор INSERT

Для добавления новых записей в таблицу предназначен оператор INSERT.

Общая структура запроса с оператором INSERT

MySQL
INSERT INTO имя_таблицы [(поле_таблицы, ...)]
VALUES (значение_поля_таблицы, ...)
| SELECT поле_таблицы, ... FROM имя_таблицы ...

В описанной структуре запроса необязательные параметры указаны в квадратных скобках. Вертикальной чертой обозначен альтернативный синтаксис.

Значения можно вставлять перечислением с помощью слова values, перечислив их в круглых скобках через запятую или c помощью оператора select. Таким образом, добавить новые записей можно следующими способами:

MySQL
INSERT INTO Goods (good_id, good_name, type)
VALUES (5, 'Table', 2);
MySQL
INSERT INTO Goods VALUES (5, 'Table', 2);
MySQL
INSERT INTO Goods 
SELECT good_id, good_name, type FROM Goods where good_name = 2;

Первичный ключ при добавлении новой записи

Следует помнить, что первичный ключ таблицы является уникальным значением и добавление уже существующего значения приведет к ошибке.

При добавлении новой записи с уникальными индексами выбор такого уникального значения может оказаться непростой задачей. Решением может быть дополнительный запрос, направленный на выявление максимального значения первичного ключа для генерации нового уникального значения.

MySQL
INSERT INTO Goods SELECT COUNT(*) + 1, 'Table', 2 FROM Goods;

MySQL

В MySQL введен механизм его автоматической генерации. Для этого достаточно снабдить первичный ключ good_id атрибутом AUTO_INCREMENT. Тогда при создании новой записи в качестве значения good_id достаточно передать NULL или 0 — поле автоматически получит значение, равное максимальному значению столбца good_id, плюс единица.

MySQL
CREATE TABLE Goods (
	good_id INT NOT NULL AUTO_INCREMENT
	...
 );
MySQL
INSERT INTO Goods VALUES (NULL, 'Table', 2);

PostgreSQL

В PostgreSQL есть схожий механизм для автоматической генерации уникального идентификатора. Для этого он имеет типы SMALLSERIAL SERIAL BIGSERIAL, которые не являются настоящими типами, а скорее просто удобством записи столбцов с уникальным идентификатором. Столбец с одним из вышеперечисленных типов будет являться целочисленным и автоматически увеличиваться при добавление новой записи.

MySQL
CREATE TABLE Goods (
	good_id SERIAL
	...
 );
MySQL
INSERT INTO Goods (good_name, type) VALUES ('Table', 2);
Объединение запросов, оператор UNION
Обновление данных, оператор UPDATE