Ответ
Оператор INSERT используется для добавления новых строк в таблицу. Его базовый синтаксис:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Почему важно указывать столбцы? Явное перечисление столбцов делает запрос устойчивым к изменениям структуры таблицы и предотвращает ошибки при несовпадении порядка значений.
Примеры:
-
Вставка одной строки:
INSERT INTO users (id, username, email, created_at) VALUES (10, 'alex_ivanov', 'alex@example.com', CURRENT_TIMESTAMP); -
Вставка нескольких строк за один запрос:
INSERT INTO products (name, price, category_id) VALUES ('Keyboard', 49.99, 1), ('Mouse', 25.50, 1), ('Monitor', 299.99, 2); -
Вставка данных из результата другого запроса (
INSERT ... SELECT):-- Копирование архивных заказов в отдельную таблицу INSERT INTO orders_archive (id, user_id, total, status) SELECT id, user_id, total, status FROM orders WHERE created_at < '2023-01-01';
Ответ 18+ 🔞
Давай разберём эту штуку, которая новые записи в таблицу пихает. INSERT, блядь, называется. Всё просто, как три копейки, но есть нюансы, ёпта.
Вот смотри, базовый загон выглядит так:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Теперь про столбцы. Можно их не указывать, если ты уверен, что порядок значений в VALUES совпадает с порядком столбцов в таблице. Но это, блядь, игра в русскую рулетку. Сегодня совпало, а завтра какой-нибудь админ добавит новый столбец в середину — и твой запрос накроется медным тазом, потому что количество значений не совпадёт. Поэтому явно перечисляй, куда что кладёшь. Это как подписать коробки при переезде, а то потом будешь искать ложки в коробке с книгами, ебать мои старые костыли.
Примеры, чтобы жизнь мёдом не казалась:
-
Запихнули одну строчку:
INSERT INTO users (id, username, email, created_at) VALUES (10, 'alex_ivanov', 'alex@example.com', CURRENT_TIMESTAMP);Всё, пользователь
alex_ivanovтеперь в системе. Живи, радуйся. -
А можно сразу пачку, чтобы два раза не бегать:
INSERT INTO products (name, price, category_id) VALUES ('Keyboard', 49.99, 1), ('Mouse', 25.50, 1), ('Monitor', 299.99, 2);Три товара — один запрос. Экономия времени, волнение ебать.
-
А вот это уже мощь, блядь! Вставка из результата другого запроса:
-- Сгребаем старые заказы в архивную таблицу INSERT INTO orders_archive (id, user_id, total, status) SELECT id, user_id, total, status FROM orders WHERE created_at < '2023-01-01';Это называется
INSERT ... SELECT. Берём всё, что наскреблиSELECT-ом из одной таблицы, и закидываем в другую. Удобно, когда надо нагнуть данные из одного места в другое, не танцуя с бубном через промежуточные файлы. Чистая магия, только без волшебной палочки.