Как использовать оператор INSERT в MySQL | Блог VK Cloud

VK Cloud

VK Cloud

8 сценариев использования оператора INSERT в MySQL

SQL — это язык структурированных запросов. Он нужен для работы с реляционными базами данных. На языке пишут запросы к системе управления базой данных, чтобы произвести какое-то действие, например изменить структуру базы, добавить или удалить данные, дать доступ к данным пользователям. СУБД обращается к базе и выполняет заданное действие.

Каждый запрос на языке SQL включает команду, которая указывает, какое именно действие нужно выполнить с данными. Такая команда называется оператором. В статье разберем основные примеры использования оператора INSERT при работе с популярной СУБД — MySQL.

Как запустить MySQL и начать в ней работать

Установка MySQL на разные операционные системы немного различается. Вот что нужно сделать, чтобы запустить СУБД на Linux и Windows:

Установка и запуск на Linux:

1) Нужно открыть терминал и выполнить команду для установки MySQL:

sudo apt-get update
sudo apt-get install mysql-server
На этом этапе нужно задать пароль для доступа к системе.

2) После установки нужно выполнить команду для запуска MySQL:

sudo service mysql start

3) Чтобы войти в MySQL и начать работу, нужно открыть терминал и ввести пароль.

Установка и запуск на Windows:

1) Нужно скачать установочный файл MySQL для своей версии операционной системы с официального сайта.

2) Далее запустить установщик и следовать инструкциям. На этом этапе в одном из шагов нужно задать пароль для доступа к системе.

3) Чтобы войти в MySQL и начать работу, нужно открыть MySQL Command Line Client из меню Start или через командную строку. Далее ввести заданный ранее пароль.

Как создать базу данных в MySQL

Чтобы начать работу с данными в MySQL, нужно создать базу данных и пользователя для управления ей. Язык SQL состоит из специальных слов и символов. То есть каждый запрос, кроме оператора, который указывает на нужное действие, включает и другие символы.

Синтаксис команды для создания базы данных и пользователя выглядит так:

CREATE DATABASE имя_базы_данных;
CREATE USER 'пользователь'@'localhost' IDENTIFIED BY 'пароль';
GRANT ALL PRIVILEGES ON имя_базы_данных.* TO 'пользователь'@'localhost';
FLUSH PRIVILEGES;
В запросе нужно заменить имя_базы_данных, пользователь и пароль на свои значения.

Базовый синтаксис оператора INSERT

В SQL есть несколько типов операторов для выполнения разных действий с базой, данными и доступами. INSERT относится к операторам типа DML (Data Manipulation Language) — командам для работы с данными в базах. INSERT используют для добавления новых записей.

Вот как выглядит базовый синтаксис запроса с оператором INSERT в MySQL:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
где:

INSERT INTO — команда для добавления данных в таблицу;
table_name — название таблицы, в которую нужно добавить данные;
column1, column2, column3, … — перечисление столбцов, в которые нужно добавить данные; 
value1, value2, value3, … — значения, которые нужно добавить в столбцы таблицы.

Добавление данных в таблицу

Вставка данных в столбцы — основное назначение оператора INSERT. Рассмотрим на примере, как добавить данные в таблицу с помощью SQL-запроса.

Допустим, в таблицу, которая называется employees и содержит данные персонала компании, нужно добавить нового сотрудника. Таблица выглядит так:

Пример SQL-запроса, чтобы добавить запись в таблицу, может выглядеть так:

INSERT INTO employees (id, имя, фамилия) VALUES ('4', 'Алексей', 'Попов');
После его выполнения в таблице появится новая запись:

Название столбцов можно не указывать. В этом случае данные добавляются в столбцы по порядку слева направо. Запрос без указания столбцов выглядит так:

INSERT INTO employees VALUES ('4', 'Алексей', Попов');

Добавление нескольких строк данных

С помощью SQL-оператора INSERT можно добавить в таблицу сразу несколько строк одновременно. Рассмотрим на примере той же таблицы с сотрудниками компании:

Допустим, компания одновременно подписала договор сразу с тремя новыми сотрудниками. SQL-запрос для добавления данных в таблицу может выглядеть так:

INSERT INTO employees VALUES ('4', 'Алексей', 'Попов'), ('5', 'Анастасия', 'Цветкова'), ('6', 'Ольга', 'Васильева');
После выполнения запроса в MySQL в таблице появятся три новые записи:

Использование INSERT с оператором SET

Альтернативный способ добавить новую запись в таблицу — использовать оператор SET. Запрос может выглядеть так:

INSERT INTO employees SET id=4, имя=Алексей, фамилия=Попов;
У этого способа есть преимущество — нагляднее видно, в какие столбцы какие данные добавятся. Однако эту команду не получится использовать, чтобы добавить сразу несколько строк в таблицу.

Использование INSERT с выборкой данных из другой таблицы

Оператор INSERT можно использовать для перемещения данных из одной таблицы в другую или для создания копии существующих данных.

Допустим, нужно перенести данные из старой таблицы с сотрудниками employees_old в новую employees. Чтобы не копировать данные, можно запустить команду:

INSERT INTO employees (id, имя, фамилия)
SELECT id, имя, фамилия
FROM employees_old;
В этом запросе INSERT комбинируется с оператором SELECT, чтобы выбрать данные из одной таблицы и вставить их в другую.

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

INSERT INTO employees
SELECT * FROM employees_old
WHERE id = 3;
Если структура таблиц разная, для переноса данных нужно указать конкретные столбцы — источники данных:

INSERT INTO employees (id, имя, фамилия)
SELECT id, имя, фамилия FROM employees_old
WHERE id = 3;

Обновление информации в записи

При использовании оператора INSERT попытка вставить данные, нарушающие уникальность, может привести к ошибке.

Вернемся к таблице с сотрудниками компании employees:

Допустим, у сотрудника с id-номером 2 изменились данные — Анна сменила фамилию после замужества с «Соколова» на «Михайлова». Можно попытаться внести новую запись командой:

INSERT INTO employees (id, имя, фамилия) VALUES ('2', 'Анна', 'Михайлова');

Однако СУБД выдаст ошибку, так как возникнет дублирование по первичному ключу — значению id.

В MySQL можно построить запрос так, что при дублировании ключа старая запись с ним обновится. Для этого используют команду ON DUPLICATE KEY UPDATE. Запрос может выглядеть так:

INSERT INTO employees (id, имя, фамилия) 
VALUES ('2', 'Анна', 'Михайлова')
ON DUPLICATE KEY UPDATE фамилия=Михайлова;

При этом в части команды KEY UPDATE можно задать любое действие с данными или несколько действий через запятую. Например, вычисление, если в поле таблицы указаны числовые данные. Тогда при обновлении записи СУБД произведет заданное вычисление в указанном поле.

Игнорирование ошибки уникальности

Бывает так, что нужно обойти ошибку уникальности и продолжить вставку данных. Рассмотрим на примере конкретной ситуации.

На сайте компании есть форма для сбора отзывов о продуктах. Отзывы собирают в таблицу reviews, в которой есть такие столбцы:

При этом при создании таблицы задали, что уникальный ключ — id_пользователя:

CREATE TABLE reviews (
id_отзыва INT AUTO_INCREMENT PRIMARY KEY, 
id_пользователя INT UNIQUE KEY, 
id_продукта INT, 
текст отзыва TEXT
);
Представим, что пользователь оставил отзыв и нужно внести данные в таблицу. При этом проверить, есть ли уже отзыв от этого пользователя, будет ресурсозатратно и это повлияет на производительность базы данных.

Чтобы MySQL не выдал ошибку уникальности при внесении новой записи, можно использовать комбинацию операторов INSERT IGNORE. Тогда СУБД проигнорирует строки, которые вызывают ошибку, и завершит вставку данных.

Синтаксис запроса для игнорирования ошибки уникальности выглядит так:

INSERT IGNORE INTO reviews (id_пользователя, id_продукта, текст_отзыва) VALUES (value1, value2, value2);
С помощью INSERT IGNORE получится внести в базу новый отзыв от того же пользователя на тот же или другой продукт.

Использование транзакций

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

Базовый синтаксис транзакции с оператором INSERT выглядит так:

START TRANSACTION;
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
COMMIT;
Рассмотрим этот сценарий использования INSERT на примере.

Допустим, в таблицу с учетными записями users нужно добавить нового пользователя. Таблица состоит из следующих столбцов:

Важно, чтобы на один email была заведена только одна учетная запись. Поэтому после добавления данных нужно проверить уникальность email. Для этого можно настроить транзакцию:

START TRANSACTION;
INSERT INTO users (имя_пользователя, email_пользователя, пароль)
VALUES ('new_user', 'new_user@example.com', 'hashed_password');
IF NOT EXISTS (SELECT 1 FROM users WHERE email_пользователя = 'new_user@example.com') THEN COMMIT;
ELSE ROLLBACK;
END IF;
В этом случае использование транзакции обеспечит атомарность операции. То есть операция либо выполнится полностью, либо не выполнится вообще. Если email уже существует в таблице, операция откатывается, чтобы избежать дублирования данных. Если условие выполняется, транзакция фиксирует изменения в базе данных.

Как работать с оператором INSERT

У оператора INSERT много сценариев использования в MySQL. В рамках статьи рассмотрели всего несколько простых и более сложных примеров: как добавлять записи в таблицы и использовать INSERT в комбинации с другими операторами.

Чтобы эффективно работать с операторами SQL, важно не только знать синтаксис, но и уметь применять его в контексте конкретных задач и проекта в целом. То есть подбирать запросы в зависимости от объема данных, требований к производительности и особенностей базы.

Рассказываем об IT-бизнесе, технологиях и цифровой трансформации

Подпишитесь в соцсетях или по email