Ниже — основные SQL‑запросы для работы с данными (не только INSERT), с короткими пояснениями и примерами на PHP + PDO.
INSERT — вставка одной строки
Добавляет новую запись. Всегда лучше указывать колонки явно.
INSERT INTO users (name, email) VALUES (:name, :email);
PHP:
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)"; $stmt = $pdo->prepare($sql); $stmt->execute([':name' => 'Иван Иванов', ':email' => 'ivan@example.com']); $id = $pdo->lastInsertId();
SELECT — выборка данных
Читает строки из таблицы. Можно выбирать все колонки или конкретные.
Все колонки:
SELECT * FROM users WHERE id = :id;
Конкретные колонки:
SELECT id, name, email FROM users WHERE email = :email;
PHP (выборка одной строки):
$sql = "SELECT id, name, email FROM users WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute([':id' => 123]); $row = $stmt->fetch(PDO::FETCH_ASSOC); // вернёт ассоциативный массив или false
PHP (выборка нескольких строк):
$sql = "SELECT id, name FROM users LIMIT 10"; $stmt = $pdo->prepare($sql); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
UPDATE — обновление существующей строки
Меняет данные в уже существующих записях. Почти всегда нужен WHERE, иначе обновится вся таблица.
DELETE FROM users WHERE id = :id;
PHP:
$sql = "DELETE FROM users WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute([':id' => 123]); $count = $stmt->rowCount();
DELETE — удаление строк
Удаляет записи. Без WHERE удалится всё.
REPLACE INTO users (name, email) VALUES (:name, :email);
PHP:
$sql = "REPLACE INTO users (name, email) VALUES (:name, :email)"; $stmt = $pdo->prepare($sql); $stmt->execute([':name' => 'Иван Иванов', ':email' => 'ivan@example.com']);
REPLACE — перезапись по уникальному ключу
Если есть дубликат по уникальному полю (например, email), старая строка удаляется и вставляется новая. По сути — «вставить или заменить».
REPLACE INTO users (name, email) VALUES (:name, :email);
PHP:
$sql = "REPLACE INTO users (name, email) VALUES (:name, :email)"; $stmt = $pdo->prepare($sql); $stmt->execute([':name' => 'Иван Иванов', ':email' => 'ivan@example.com']);
Важно:
REPLACEможет менятьid(если автоинкремент), потому что это фактическиDELETE+INSERT.
INSERT … ON DUPLICATE KEY UPDATE — аккуратная «вставка или обновление»
Если запись с уникальным ключом уже есть — обновит указанные поля, а не удалит и не создаст заново. Это чаще используют вместо REPLACE, чтобы не терять ID и не сбрасывать автоинкременты.
INSERT INTO users (name, email) VALUES (:name, :email) ON DUPLICATE KEY UPDATE name = :name;
PHP:
$sql = "INSERT INTO users (name, email) VALUES (:name, :email) ON DUPLICATE KEY UPDATE name = :name"; $stmt = $pdo->prepare($sql); $stmt->execute([ ':name' => 'Иван Иванов', ':email' => 'ivan@example.com', ]);
TRUNCATE — очистка всей таблицы
Полностью удаляет все строки, сбрасывает автоинкремент. Работает быстрее, чем DELETE FROM table, но нельзя откатить в рамках транзакции в некоторых движках.
TRUNCATE TABLE users;
PHP:
$pdo->exec("TRUNCATE TABLE users");
Не используйте плейсхолдеры в
TRUNCATE— это DDL‑команда, она не принимает параметры.
MERGE (в MySQL его нет) — важное уточнение
В некоторых СУБД (Oracle, SQL Server) есть MERGE для «вставить/обновить по условию». В MySQL аналога нет: вместо него используют INSERT ... ON DUPLICATE KEY UPDATE либо логику на стороне PHP.
Частые ошибки и как их избегать
- Забыл WHERE в UPDATE/DELETE → меняются/удаляются лишние строки. Всегда сначала проверяйте
SELECTс тем же условием. - Прямая подстановка значений в SQL → риск SQL‑инъекций. Используйте
prepare()+execute()с плейсхолдерами. - Не проверяете результат → полезно смотреть
rowCount()и обрабатывать исключенияPDOException. - Смешивание стилей плейсхолдеров → в одном запросе используйте либо именованные (
:name), либо позиционные (?), не вместе.
