SQL INSERT INTO

INSERT INTO в SQL: добавление одной и нескольких строк в таблицу, вставка без указания столбцов, частые ошибки.

INSERT INTO — оператор SQL для добавления новых строк в таблицу базы данных. Без него таблица остаётся пустой.

Синтаксис

Базовая форма: перечислить столбцы и соответствующие им значения.

INSERT INTO имя_таблицы (столбец1, столбец2, ...)
VALUES (значение1, значение2, ...);

Правило. Строки и даты заключают в одинарные кавычки ('значение'). Числа пишут без кавычек. Порядок значений должен точно совпадать с порядком столбцов.

Пример 1: вставка одной строки

Демо-таблица persons уже существует в песочнице. Добавим ещё одну запись и сразу выберем всё, чтобы убедиться:

INSERT INTO persons (name, birth_date, phone)
VALUES ('Anna Schmidt', '2000-03-20', '0300-112233');

SELECT * FROM persons;

Результат:

+----+------------------+------------+-------------+
| id | name             | birth_date | phone       |
+----+------------------+------------+-------------+
|  1 | Peter Wilson     | 1990-07-15 | 0711-020361 |
|  2 | Carrie Simpson   | 1995-05-01 | 0251-031259 |
|  3 | Victoria Ashworth| 1996-10-17 | 0695-346721 |
|  4 | George Bailey    | 1993-03-05 | 0897-034214 |
|  5 | Norman Bates     | 1999-08-25 | 0522-556721 |
|  6 | Anna Schmidt     | 2000-03-20 | 0300-112233 |
+----+------------------+------------+-------------+

Пример 2: вставка нескольких строк за один запрос

Вместо нескольких отдельных INSERT можно перечислить строки через запятую — это быстрее и удобнее:

-- Создаём изолированную таблицу для демонстрации
CREATE TABLE contacts_demo (
    id    INTEGER PRIMARY KEY,
    name  TEXT NOT NULL,
    city  TEXT
);

INSERT INTO contacts_demo (id, name, city) VALUES
    (1, 'Alice',  'Москва'),
    (2, 'Bob',    'Берлин'),
    (3, 'Carlos', 'Мадрид');

SELECT * FROM contacts_demo;

Результат:

+----+--------+--------+
| id | name   | city   |
+----+--------+--------+
|  1 | Alice  | Москва |
|  2 | Bob    | Берлин |
|  3 | Carlos | Мадрид |
+----+--------+--------+

Пример 3: вставка без явного списка столбцов

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

-- Только иллюстрация — не запускать как самодостаточный блок
-- INSERT INTO persons VALUES (7, 'Ivan Petrov', '1988-11-05', '0900-445566');
-- Значения: id, name, birth_date, phone — точно в порядке столбцов таблицы

Рекомендация. Всегда указывайте список столбцов явно — это защищает запрос от поломки при изменении структуры таблицы.

Частые ошибки

Ошибка

Причина

Число столбцов ≠ числу значений

Несоответствие количества — ошибка синтаксиса

Дата без кавычек

1990-07-15 воспринимается как выражение, а не дата

Нарушение NOT NULL

Попытка вставить NULL в обязательный столбец

Дублирование первичного ключа

Два ряда с одинаковым id — ошибка уникальности

Коротко

  • INSERT INTO таблица (столбцы) VALUES (значения); — базовая форма.
  • Несколько строк вставляют одним запросом, перечисляя кортежи значений через запятую.
  • Строки и даты — в одинарных кавычках, числа — без.
  • Всегда указывайте список столбцов явно — это сделает код устойчивым к изменениям схемы.
Проверьте себя
1. Какой оператор используется для добавления новых строк в таблицу?
AADD INTO ... VALUES
BPUSH INTO ... VALUES
CINSERT INTO ... VALUES
DPUT INTO ... VALUES
2. Нужно ли указывать значение для столбца id, объявленного как AUTO_INCREMENT, при вставке строки?
AДа, всегда — иначе SQL вернёт ошибку
BДа, нужно передать 0, чтобы запустить автоинкремент
CНет, MySQL автоматически сгенерирует значение
DНет, но тогда в столбец запишется NULL
3. Как правильно записать строковое значение и числовое значение в INSERT?
AСтроки — в одинарных или двойных кавычках, числа — без кавычек
BСтроки — без кавычек, числа — в одинарных кавычках
CИ строки, и числа — всегда в двойных кавычках
DСтроки — в квадратных скобках, числа — без кавычек
4. Какой запрос вставит запись о сотруднике Анне с датой рождения 1990-03-15 и телефоном '0711-111111' в таблицу persons (без поля id)?
AINSERT persons (name, birth_date, phone) SET ('Анна', '1990-03-15', '0711-111111');
BINSERT INTO persons (name, birth_date, phone) VALUES ('Анна', '1990-03-15', '0711-111111');
CINSERT INTO persons VALUES ('Анна', '1990-03-15', '0711-111111');
DADD INTO persons (name, birth_date, phone) VALUES ('Анна', 1990-03-15, 0711-111111);