← Все вопросы

Как вставить новые данные в таблицу SQL (INSERT)?

Задан 4 месяца назад435 просмотров2 ответа
9

Только начал с SQL. Как добавить новую строку в таблицу? Нужно ли перечислять все столбцы и что делать с автоинкрементным id? Как вставить сразу несколько строк?

2 ответа

13
✓ Принятый ответ — помог автору

Новые строки добавляет команда INSERT INTO. Базовая форма — перечислить столбцы и значения:

INSERT INTO users (name, email, city)
VALUES ('Анна', '[email protected]', 'Москва');

Хорошая практика — всегда указывать список столбцов. Без него (INSERT INTO users VALUES (...)) придётся перечислять значения для всех столбцов строго в порядке таблицы, и любое изменение схемы всё сломает.

Про автоинкрементный id: его обычно не указывают — база сама подставит следующее число. Просто не включайте id в список столбцов.

Вставить несколько строк за один запрос (быстрее, чем по одной):

INSERT INTO users (name, city) VALUES
  ('Анна', 'Москва'),
  ('Борис', 'Казань'),
  ('Вера', 'Сочи');

Можно вставить и результат другого запроса (скопировать данные):

INSERT INTO archive_orders (id, total)
SELECT id, total FROM orders WHERE status = 'done';

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

  1. Пропустить столбец, помеченный NOT NULL без значения по умолчанию — будет ошибка.
  2. Нарушить уникальность (UNIQUE/первичный ключ) — вставка с уже существующим значением упадёт. В Postgres это решают через INSERT ... ON CONFLICT, в MySQL — INSERT IGNORE / ON DUPLICATE KEY UPDATE.
4

Часто нужно сразу узнать id только что вставленной строки. В PostgreSQL это делают через INSERT ... RETURNING id;. В MySQL — функцией LAST_INSERT_ID() сразу после вставки, в SQL Server — SCOPE_IDENTITY(). Это удобно, когда нужно вставить «родителя», получить его id и тут же добавить связанные строки в другую таблицу с этим id во внешнем ключе.

Ваш ответ

Войдите, чтобы ответить на вопрос.