Каков синтаксис оператора INSERT в SQL?

Ответ

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

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

Почему важно указывать столбцы? Явное перечисление столбцов делает запрос устойчивым к изменениям структуры таблицы и предотвращает ошибки при несовпадении порядка значений.

Примеры:

  1. Вставка одной строки:

    INSERT INTO users (id, username, email, created_at)
    VALUES (10, 'alex_ivanov', 'alex@example.com', CURRENT_TIMESTAMP);
  2. Вставка нескольких строк за один запрос:

    INSERT INTO products (name, price, category_id)
    VALUES 
        ('Keyboard', 49.99, 1),
        ('Mouse', 25.50, 1),
        ('Monitor', 299.99, 2);
  3. Вставка данных из результата другого запроса (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 совпадает с порядком столбцов в таблице. Но это, блядь, игра в русскую рулетку. Сегодня совпало, а завтра какой-нибудь админ добавит новый столбец в середину — и твой запрос накроется медным тазом, потому что количество значений не совпадёт. Поэтому явно перечисляй, куда что кладёшь. Это как подписать коробки при переезде, а то потом будешь искать ложки в коробке с книгами, ебать мои старые костыли.

Примеры, чтобы жизнь мёдом не казалась:

  1. Запихнули одну строчку:

    INSERT INTO users (id, username, email, created_at)
    VALUES (10, 'alex_ivanov', 'alex@example.com', CURRENT_TIMESTAMP);

    Всё, пользователь alex_ivanov теперь в системе. Живи, радуйся.

  2. А можно сразу пачку, чтобы два раза не бегать:

    INSERT INTO products (name, price, category_id)
    VALUES 
        ('Keyboard', 49.99, 1),
        ('Mouse', 25.50, 1),
        ('Monitor', 299.99, 2);

    Три товара — один запрос. Экономия времени, волнение ебать.

  3. А вот это уже мощь, блядь! Вставка из результата другого запроса:

    -- Сгребаем старые заказы в архивную таблицу
    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-ом из одной таблицы, и закидываем в другую. Удобно, когда надо нагнуть данные из одного места в другое, не танцуя с бубном через промежуточные файлы. Чистая магия, только без волшебной палочки.