Как в SQL добавить строку в таблицу: запрос SQL INSERT INTO
Обучение SQL с примерами: как написать SQL команды, чтобы добавить данные в таблицу?
Объясняю как вставить данные в таблицу базы данных, простыми словами без воды. Команда INSERT INTO — это легко! Подойдёт для MySQL, PostgresQL, MS SQL, SQLite, Oracle, MariaDB и других SQL СУБД.
Команда INSERT в SQL используется для добавления новых строк в таблицу:
INSERT INTO названиеТаблицы
(поле1, поле2, поле3)
VALUES
(значение1, значение2, значение3);
Это буквально означает: «ВСТАВИТЬ в таблицу названиеТаблицы (перечисляем поля через запятую) ЗНАЧЕНИЯ (перечисляем значения через запятую)».
Обратите внимание, что значения должны идти в том же порядке, в котором идут поля, чтобы значения записались в нужные поля. Также количество полей и количество значений должно совпадать, иначе будет ошибка.
Например, если у нас есть таблица контактов contacts, и мы хотим добавить новую запись с полями name, website и telegram, наша команда будет выглядеть так:
INSERT INTO contacts
(name, website, telegram)
VALUES
('Рик', 'fullstack-freelancer.ru', '@fullstackfreelancer');
Как одной командой INSERT вставить несколько строк в таблицу SQL?
SQL позволяет добавить несколько записей в таблицу с помощью одной команды INSERT. Это может быть полезно, когда необходимо быстро загрузить множество данных. Синтаксис будет следующим:
INSERT INTO названиеТаблицы
(поле1, поле2, поле3)
VALUES
(значение1a, значение2a, значение3a),
(значение1b, значение2b, значение3b),
(значение1c, значение2c, значение3c);
То есть поля мы оставляем как есть, а после VALUES перечисляем необходимое количество добавляемых записей, и указываем для них значения полей, которые мы указали после INSERT INTO.
Если мы в запросе указали не все поля, которые есть в таблице, в добавленных записях эти поля будут содержать значения по умолчанию (настраиваются при создании таблицы). Если какие либо из этих не указанных полей обязательны к заполнению - SQL запрос завершится ошибкой.
Как вставить NULL значение в SQL при добавлении записи?
При добавлении данных в таблицу, если вы хотите оставить какое-либо поле пустым, вы можете использовать значение NULL для этого поля. Например, если поле website может быть незаполненным, команда будет выглядеть так:
INSERT INTO contacts
(name, website, telegram)
VALUES
('Рик', NULL, '@fullstackfreelancer');
Обратите внимание, что SQL-запрос завершится ошибкой, если у этого поля стоит флаг "NOT NULL" (настраивается при создании таблицы).
Как в SQL INSERT вставить данные из другой таблицы?
Команда INSERT может использоваться в сочетании с SELECT, чтобы добавлять данные из одной таблицы в другую. Это позволяет перемещать или копировать данные без необходимости вникать в их содержимое. Пример SQL-запроса добавления данных из одной таблицы в другую выглядит так:
INSERT INTO названиеЦелевойТаблицы
(поле1, поле2)
SELECT
полеТаблицыИсточника1, полеТаблицыИсточника2
FROM
названиеТаблицыИсточника
WHERE
условия;
Например, если у нас есть таблица old_users, и мы хотим скопировать всех пользователей старше 30 лет в новую таблицу new_users, команда будет следующей:
INSERT INTO new_users
(name, email)
SELECT
name, email
FROM
old_users
WHERE
age > 30;
Это особенно полезно для архивирования в базе данных и обработке больших объемов информации.
Обработка ошибок при вставке данных в SQL
SQL предоставляет различные методы для обработки ситуаций, когда вы пытаетесь вставить запись с уже существующим в других записях значением уникального (UNIQUE) поля таблицы.
SQL INSERT OR IGNORE - игнорирование добавления записей с дубликатами уникальных значений
Если запись с таким же уникальным значением уже существует, SQL игнорирует данное действие, чтобы избежать ошибки. Это полезно, когда вы хотите вставить данные, но не хотите, чтобы произошла ошибка из-за дубликатов значений.
Предположим, мы хотим вставить нового пользователя, но если такое значение уже добавлено для поля, которое отмечено уникальным (UNIQUE - настраивается при создании таблицы) - допустим в нашем примере это будет email, мы хотим просто пропустить вставку.
Пример использования SQL запроса INSERT OR IGNORE INTO:
INSERT OR IGNORE INTO users
(name, email)
VALUES
('Рик', 'contact@fullstack-freelancer.com');
В этом случае, если пользователь с email contact@fullstack-freelancer.com уже существует в таблице, команда INSERT OR IGNORE просто проигнорирует эту попытку вставки и не вызовет ошибку. Если же пользователя с указанным email не существует, то он будет успешно добавлен в таблицу users.
Как в SQL либо добавить новую запись либо отредактировать существующую? INSERT ON DUPLICATE KEY UPDATE
В предыдущем примере мы рассмотрели как можно игнорировать добавление записи содержащей значение, которое уже содержится в уникальном поле в других записях.
Возможности SQL даже позволяют нам в такой ситуации отредактировать ту запись, в которой было обнаружено совпадение по уникальному значению!
Пример использования SQL запроса INSERT ON DUPLICATE KEY UPDATE:
INSERT INTO users (
id,
name,
email
) VALUES (
1,
'Рик',
'contact@fullstack-freelancer.com'
) ON DUPLICATE KEY UPDATE
name = 'Рик',
email = 'contact@fullstack-freelancer.com';
Этот код добавляет нового пользователя, если id 1 не существует, или обновляет имя и email, если пользователь с таким id уже есть.