Как вставить новые данные в таблицу SQL (INSERT)?
Только начал с SQL. Как добавить новую строку в таблицу? Нужно ли перечислять все столбцы и что делать с автоинкрементным id? Как вставить сразу несколько строк?
2 ответа
Новые строки добавляет команда 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';
Частые ошибки:
- Пропустить столбец, помеченный
NOT NULLбез значения по умолчанию — будет ошибка. - Нарушить уникальность (
UNIQUE/первичный ключ) — вставка с уже существующим значением упадёт. В Postgres это решают черезINSERT ... ON CONFLICT, в MySQL —INSERT IGNORE/ON DUPLICATE KEY UPDATE.
Часто нужно сразу узнать id только что вставленной строки. В PostgreSQL это делают через INSERT ... RETURNING id;. В MySQL — функцией LAST_INSERT_ID() сразу после вставки, в SQL Server — SCOPE_IDENTITY(). Это удобно, когда нужно вставить «родителя», получить его id и тут же добавить связанные строки в другую таблицу с этим id во внешнем ключе.