INSERT, UPDATE, DELETE
198 мин
Когда таблица готова, в неё добавляют, меняют и удаляют данные. Эти три команды — INSERT, UPDATE, DELETE — вместе с SELECT составляют основу повседневной работы. Пробуйте их в свободном режиме.
INSERT — добавление
INSERT INTO books (title, author, year, price)
VALUES ('O‘tkan kunlar', 'Abdulla Qodiriy', 1926, 65000);- в скобках — в какие столбцы;
- в
VALUES— значения в том же порядке; idне пишем — база проставит его сама.
Несколько строк сразу:
INSERT INTO books (title, author, year) VALUES
('Mehrobdan chayon', 'Abdulla Qodiriy', 1929),
('Kecha va kunduz', 'Cho‘lpon', 1936);Всегда указывайте список столбцов.
INSERT INTO books VALUES (…)ждёт все столбцы таблицы ровно в их порядке — стоит добавить в таблицу столбец, и такие запросы сломаются.
Если в тексте есть апостроф, удвойте его: 'O''tkan kunlar'. В наших примерах используется типографский знак (‘), он не кавычка, поэтому проблемы нет.
UPDATE — изменение
UPDATE books SET price = 70000 WHERE id = 1;Несколько столбцов: SET price = 70000, year = 1925. Можно считать от старого значения:
UPDATE books SET price = price * 1.1 WHERE author = 'Abdulla Qodiriy';DELETE — удаление
DELETE FROM books WHERE year < 1900;Самая опасная ошибка: забыть WHERE
UPDATE books SET price = 0; -- ВСЕ книги стали бесплатными!
DELETE FROM books; -- ВСЕ книги удалены!Хорошая привычка: перед UPDATE или DELETE выполнить SELECT с тем же WHERE и посмотреть, какие строки будут затронуты:
SELECT * FROM books WHERE year < 1900; -- сначала проверяем
DELETE FROM books WHERE year < 1900; -- потом удаляемЕщё одна страховка — транзакция: BEGIN; … проверка … COMMIT; или ROLLBACK;. Об этом — в уроке «Транзакции».
Сколько строк затронуто?
В ответе psql: UPDATE 3, DELETE 1, INSERT 0 2 (последнее число — добавленные строки).
Номер добавленной строки
В PostgreSQL есть RETURNING: INSERT INTO books (title, author) VALUES ('…', '…') RETURNING id; — новый id вернётся сразу.
Упражнение
Этому посвящены этап 3 (INSERT) и этап 6 (UPDATE, DELETE) раздела «Практика». Если на этапе 6 забыть WHERE, тренажёр вернёт базу в прежнее состояние и объяснит, что произошло.
Запомните
INSERT INTO таблица (столбцы) VALUES (…);UPDATE таблица SET столбец = значение WHERE условие;DELETE FROM таблица WHERE условие;— безWHEREзатронет все строки.