INSERT, UPDATE и DELETE
Меняем содержимое таблиц: добавляем, обновляем и удаляем строки безопасно.
Команды INSERT, UPDATE и DELETE изменяют данные в таблице — в отличие от
SELECT, который только читает.
INSERT — добавление строк
Можно вставлять по одной строке, а можно пакетом — это эффективнее, чем много отдельных INSERT.
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER
);
INSERT INTO products (name, price) VALUES ('Кофе', 300);
INSERT INTO products (name, price) VALUES
('Чай', 150),
('Сок', 200),
('Вода', 50);
SELECT name, price FROM products ORDER BY price DESC;
Вывод:
name price Кофе 300 Сок 200 Чай 150 Вода 50
UPDATE — обновление
UPDATE меняет значения в существующих строках. Золотое правило: почти всегда нужен WHERE. Без него обновятся ВСЕ строки таблицы.
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER
);
INSERT INTO products (name, price) VALUES
('Кофе', 300), ('Чай', 150), ('Сок', 200);
UPDATE products SET price = price + 50 WHERE name = 'Чай';
SELECT name, price FROM products ORDER BY id;
Вывод:
name price Кофе 300 Чай 200 Сок 200
Подорожал только «Чай», потому что мы ограничили обновление через WHERE.
DELETE — удаление строк
То же предупреждение: DELETE без WHERE очистит всю таблицу. Указывайте условие.
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER
);
INSERT INTO products (name, price) VALUES
('Кофе', 300), ('Чай', 150), ('Вода', 50);
DELETE FROM products WHERE price < 100;
SELECT name, price FROM products ORDER BY id;
Вывод:
name price Кофе 300 Чай 150
«Вода» удалилась — её цена меньше 100.
DELETE против TRUNCATE
Чтобы быстро очистить таблицу целиком, в MySQL есть TRUNCATE TABLE. Он удаляет все строки разом, сбрасывает счётчик AUTO_INCREMENT и работает быстрее, чем DELETE, но его нельзя откатить в транзакции и нельзя ограничить условием.
TRUNCATE TABLE logs; -- мгновенно очистить таблицу логов
Итог
INSERTдобавляет строки; пакетная вставка нескольких строк эффективнее.UPDATEиDELETEпочти всегда требуютWHERE— иначе затронут всю таблицу.TRUNCATE TABLEбыстро чистит таблицу целиком и сбрасывает счётчик автонумерации.- Перед массовым изменением полезно проверить условие через
SELECTс тем жеWHERE.