До сих пор мы фокусировались на извлечении данных из существующих таблиц с помощью оператора SELECT. Теперь мы начнем изучать язык манипулирования данными (DML), начав с того, как добавлять новые данные в ваши таблицы с помощью оператора INSERT INTO.
Существует два основных способа использования оператора INSERT INTO.
Это самый безопасный и распространенный метод. Вы явно перечисляете столбцы, которые хотите заполнить, а затем указываете значения для этих столбцов.
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
Если вы предоставляете значения для всех столбцов таблицы в том самом порядке, в котором они были определены, вы можете опустить имена столбцов. Однако этот способ менее гибок и может привести к ошибкам, если структура таблицы изменится.
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
WHERE, строковые (текстовые) и даты должны быть заключены в одинарные кавычки (').NULL и вы не предоставляете для него значение, он будет заполнен NULL (или значением по умолчанию, если оно определено).Давайте добавим нового актера в таблицу actor базы данных Sakila.
INSERT INTO actor (first_name, last_name)
VALUES ('JOHNNY', 'DEPP');
Примечание: Мы не указывали actor_id, так как он обычно генерируется базой данных автоматически.
Если у нас есть таблица со множеством столбцов, но мы хотим заполнить только некоторые из них:
INSERT INTO customer (first_name, last_name, email, store_id, address_id)
VALUES ('ALICE', 'JOHNSON', 'alice.j@example.com', 1, 5);
Большинство современных баз данных позволяют вставлять несколько строк в одном операторе, разделяя наборы значений запятыми.
INSERT INTO actor (first_name, last_name)
VALUES
('TOM', 'HANKS'),
('MERYL', 'STREEP'),
('LEONARDO', 'DICAPRIO');
INSERT INTO ... SELECT)Иногда требуется не вводить данные вручную, а перенести их из одной таблицы в другую (например, при архивации или создании отчетов). Для этого используется комбинация INSERT INTO и SELECT.
INSERT INTO target_table (column1, column2, column3)
SELECT source_column1, source_column2, source_column3
FROM source_table
WHERE condition;
Важной особенностью этой команды является то, что в блоке SELECT вы можете комбинировать различные типы значений:
source_column1).amount * 0.1).Допустим, у нас есть таблица customer_archive, и мы хотим перенести туда данные из основной таблицы customer, добавив дату архивации и пометку о статусе:
INSERT INTO customer_archive (customer_id, full_name, archived_at, status_note)
SELECT
customer_id,
CONCAT(first_name, ' ', last_name), -- Вычисляемое значение (ФИО)
CURRENT_DATE, -- Константа (текущая дата)
'Auto-archived' -- Константа (текстовая метка)
FROM customer
WHERE active = 0;
Примечание: Количество и порядок столбцов в INSERT INTO должны строго совпадать с количеством и порядком столбцов, возвращаемых в SELECT.
При вставке строки не всегда нужно указывать значение для каждого столбца. База данных обрабатывает пропущенные значения двумя способами: через NULL и через значения по умолчанию.
Если столбец допускает NULL, вы можете передать ключевое слово NULL напрямую в качестве значения:
INSERT INTO customer (first_name, last_name, email, store_id, address_id)
VALUES ('BOB', 'SMITH', NULL, 1, 5);
Здесь столбец email будет сохранён как NULL, то есть «значение не задано».
Если у столбца определено значение DEFAULT в схеме таблицы, его можно полностью опустить из списка столбцов. База данных заполнит его автоматически:
INSERT INTO actor (first_name, last_name)
VALUES ('CATE', 'BLANCHETT');
Столбцы actor_id (автоинкремент) и last_update (временная метка по умолчанию) заполняются базой данных без явного указания.
Можно также использовать ключевое слово DEFAULT, чтобы указать базе данных применить значение по умолчанию, при этом сохранив столбец в списке:
INSERT INTO actor (actor_id, first_name, last_name, last_update)
VALUES (DEFAULT, 'CATE', 'BLANCHETT', DEFAULT);
Это удобно, когда оператор перечисляет все столбцы, но некоторые из них должны по-прежнему заполняться базой данных.
Ключевые выводы этого урока:
INSERT INTO используется для добавления новых строк в таблицу.INSERT INTO ... SELECT позволяет копировать данные из одной таблицы в другую.SELECT можно комбинировать реальные данные из таблицы, вычисляемые поля и константы.NULL или значением DEFAULT можно опустить или передать явно с помощью ключевых слов NULL и DEFAULT.В следующем уроке мы рассмотрим, как изменять уже существующие записи с помощью оператора UPDATE.