INSERT, UPDATE, DELETE
Учимся добавлять, изменять и удалять строки таблицы.
INSERT, UPDATE, DELETE — три команды изменения данных: добавить строки, поменять значения в существующих, удалить ненужные.
INSERT — варианты вставки
Базовый INSERT мы уже видели. Полезно знать его варианты. Можно указать столбцы явно (рекомендуется) или вставить значения для всех столбцов по порядку. Можно добавить несколько строк за раз.
CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, price INTEGER);
-- 1) явное перечисление столбцов
INSERT INTO products (name, price) VALUES ('Клавиатура', 2500);
-- 2) сразу несколько строк
INSERT INTO products (name, price) VALUES ('Мышь', 1200), ('Коврик', 600);
SELECT * FROM products;
Вывод:
1|Клавиатура|2500 2|Мышь|1200 3|Коврик|600
Ещё бывает INSERT INTO ... SELECT ... — вставка результатов запроса (например, копирование строк из другой таблицы) и INSERT OR IGNORE / INSERT OR REPLACE для разрешения конфликтов с ограничениями.
UPDATE — обновление строк
UPDATE меняет значения в существующих строках. Указываем таблицу, через SET — какие столбцы и на что меняем, через WHERE — какие строки трогаем. Поднимем цену недорогих товаров на 10%:
CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, price INTEGER);
INSERT INTO products (name, price) VALUES
('Клавиатура', 2500), ('Мышь', 1200), ('Монитор', 18000);
UPDATE products
SET price = price * 110 / 100
WHERE price < 3000;
SELECT name, price FROM products;
Вывод:
Клавиатура|2750 Мышь|1320 Монитор|18000
Монитор не изменился — его цена не прошла условие WHERE. Новое значение столбца считается из старого: price = price * 110 / 100.
Главное правило: не забывайте WHERE
Если в UPDATE или DELETE забыть WHERE, операция применится ко всем строкам. UPDATE products SET price = 0; обнулит цену у всех товаров, а DELETE FROM products; очистит таблицу целиком. Перед опасной операцией полезно сначала выполнить SELECT с тем же WHERE и убедиться, что выбираются именно нужные строки.
DELETE — удаление строк
DELETE удаляет строки, подходящие под условие. Удалим слишком дешёвые товары:
CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT, price INTEGER);
INSERT INTO products (name, price) VALUES
('Клавиатура', 2500), ('Мышь', 1200), ('Коврик', 600);
DELETE FROM products WHERE price < 1000;
SELECT name, price FROM products;
Вывод:
Клавиатура|2500 Мышь|1200
«Коврик» исчез, потому что его цена меньше 1000. Остальные строки остались на месте.
Итог
INSERTдобавляет строки; можно перечислять столбцы, вставлять пачкой и из результатаSELECT.UPDATE ... SET ... WHERE ...меняет значения; новое значение можно вычислять из старого.DELETE FROM ... WHERE ...удаляет строки; безWHEREи UPDATE, и DELETE затрагивают всю таблицу.