Kodokon kodokon.com

Изменение данных: INSERT, UPDATE, DELETE

Добавляй, изменяй и удаляй строки безопасно, избегая классической ловушки с забытым WHERE.

8 мин · 3 вопросов

Открыть этот урок в Kodokon

До сих пор ты только читал данные. Перейдём к записи. INSERT INTO добавляет строку: ты перечисляешь столбцы в скобках, а затем соответствующие значения после VALUES, в том же порядке. Явно называть столбцы - хорошая привычка: запрос остаётся корректным, даже если структура таблицы изменится.

SQL
INSERT INTO books (id, title, author, genre, year, price)
VALUES (8, 'Ravage', 'Barjavel', 'sf', 1943, 7.5);

SELECT * FROM books WHERE id = 8;
Добавляем 8-ю книгу, затем проверяем

UPDATE изменяет существующие строки: после SET ты указываешь столбец и его новое значение; после WHERE - какие строки затронуты. Этот WHERE критически важен: именно он нацеливает изменение.

SQL
UPDATE books SET price = 8.9 WHERE id = 8;

SELECT title, price FROM books WHERE id = 8;
Цена Ravage меняется с 7.5 на 8.9

DELETE FROM удаляет строки. Как и в случае с UPDATE, конструкция WHERE указывает строки для удаления; остальные остаются нетронутыми. Удалим книгу, которую только что добавили, и проверим количество.

SQL
DELETE FROM books WHERE id = 8;

SELECT COUNT(*) FROM books;
Снова 7 строк: исходная таблица цела
SQL
BEGIN;
DELETE FROM books WHERE genre = 'sf';
SELECT COUNT(*) FROM books;
ROLLBACK;
SELECT COUNT(*) FROM books;
3 строки во время транзакции, 7 после ROLLBACK

Проверка знаний

Убедись, что запомнил ключевые моменты этого урока.

  1. Что делает запрос DELETE FROM books;, выполненный без WHERE?
    • Удаляет первую строку таблицы
    • Удаляет все строки таблицы
    • Вызывает синтаксическую ошибку
  2. Какой запрос меняет цену книги с id 3 на 6.9?
    • UPDATE books SET price = 6.9 WHERE id = 3;
    • INSERT INTO books SET price = 6.9;
    • SELECT price = 6.9 FROM books WHERE id = 3;
  3. Для чего в транзакции нужен ROLLBACK?
    • Чтобы зафиксировать изменения окончательно
    • Чтобы отменить все изменения, сделанные после BEGIN
    • Чтобы удалить затронутую таблицу