Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 967новых вакансий за сутки·94 749вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 308
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 098
  • Облачные технологии13 740
  • QA вакансии3 442
  • Backend вакансии2 113
  • Инженер данных1 769
  • Продакт-менеджер1 215

Разработка

  • Android1 857
  • iOS1 692
  • Fullstack вакансии980
  • AI вакансии956
  • Frontend вакансии750
  • Mobile вакансии44

По стеку

  • Go8 640
  • Java6 540
  • Node.js2 016
  • .NET1 705
  • Kotlin1 619
  • Rust1 458
  • C#701
  • PHP681
  • C++564

DevOps и инфраструктура

  • Kubernetes7 596
  • DevOps вакансии6 045
  • Linux-инфраструктура5 418
  • Terraform / IaC4 165
  • CI/CD3 212
  • Мониторинг и Observability1 759
  • SRE564
  • Кибербезопасность430

Аналитика и данные

  • Data Scientist1 093
  • Бизнес-аналитик914
  • Аналитик данных851
  • Системный аналитик150

Другие направления

  • Проджект-менеджер570
  • UI/UX дизайн144
  • Ручное тестирование14

По регионам

  • Вакансии в США45 435
  • Вакансии в Европе23 707
  • Вакансии в Канаде4 503
  • Работа в России3 905

По формату

  • Удалённые вакансии76 073
  • Релокация в США45 435
  • Гибридная работа12 406
  • Офисная работа7 080

По уровню

  • Senior вакансии42 979
  • Middle вакансии21 322
  • Junior вакансии6 799

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML165 вакансий
  • Grab139 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме MySQLВсе вопросы
MySQLJuniorТеория

В чём разница между DELETE, TRUNCATE и DROP?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

DELETE — DML с транзакцией и undo log (откат возможен, триггеры срабатывают); TRUNCATE — DDL, пересоздаёт таблицу, вызывает implicit commit, сбрасывает AUTO_INCREMENT, триггеры не срабатывают; DROP — DDL, удаляет таблицу целиком необратимо.

Транзакционность и implicit commit

-- DELETE — можно откатить
START TRANSACTION;
DELETE FROM orders WHERE created_at < '2024-01-01';
ROLLBACK;  -- строки вернутся

-- TRUNCATE вызывает implicit commit ПЕРЕД выполнением
START TRANSACTION;
INSERT INTO log VALUES ('important');
TRUNCATE TABLE staging_orders;  -- здесь MySQL неявно делает COMMIT!
-- INSERT уже зафиксирован, его не откатить
ROLLBACK;  -- ничего не делает

-- DROP — аналогично TRUNCATE, implicit commit
DROP TABLE old_reports;

Три разные операции

DELETE, TRUNCATE и DROP — принципиально разные по семантике, транзакционности и производительности.

  • DELETE — DML-операция. Удаляет строки по условию (или все, если WHERE нет). Каждая удалённая строка пишется в undo log и binlog (row-формат — построчно). Работает внутри транзакции: можно сделать ROLLBACK. Триггеры BEFORE DELETE / AFTER DELETE срабатывают.
  • TRUNCATE — DDL-операция (несмотря на «очистку таблицы»). В InnoDB пересоздаёт таблицу (drop + recreate), сбрасывает AUTO_INCREMENT. Вызывает implicit commit — нельзя откатить в рамках BEGIN...ROLLBACK. Триггеры не срабатывают. Значительно быстрее DELETE на больших таблицах.
  • DROP — DDL-операция. Удаляет таблицу целиком (структуру + данные + индексы). Тоже вызывает implicit commit. Отменить нельзя (только восстановление из бэкапа).

Производительность

-- DELETE миллиона строк — медленно: row-by-row undo log + binlog
DELETE FROM big_table WHERE status = 'archived';
-- Лучше батчами:
DELETE FROM big_table WHERE status = 'archived' LIMIT 10000;
-- Повторять до ROW_COUNT() = 0

-- TRUNCATE — мгновенно (пересоздаёт .ibd файл):
TRUNCATE TABLE big_table;

-- DROP — мгновенно, но необратимо:
DROP TABLE big_table;

AUTO_INCREMENT и FK

CREATE TABLE demo (id INT AUTO_INCREMENT PRIMARY KEY, val VARCHAR(50));
INSERT INTO demo VALUES (NULL, 'a'), (NULL, 'b');  -- id: 1, 2
DELETE FROM demo;                                    -- AUTO_INCREMENT остаётся 3
TRUNCATE TABLE demo;                                 -- AUTO_INCREMENT сбрасывается в 1

-- TRUNCATE и FK: если на таблицу есть FOREIGN KEY из другой таблицы,
-- TRUNCATE вернёт ошибку (в отличие от DELETE с каскадом)

Binlog и репликация

DELETE логируется построчно в row-based binlog или как SQL-запрос в statement-based. TRUNCATE и DROP пишутся как DDL-события и реплицируются как statement. На реплике TRUNCATE/DROP применяется немедленно и не может быть «отмотан» через binlog.

Подводные камни

  • TRUNCATE не откатывается — implicit commit до и после операции. Случайный TRUNCATE в середине транзакции фиксирует всё, что было раньше.
  • Триггеры игнорируются TRUNCATE — если в BEFORE/AFTER DELETE есть бизнес-логика (аудит, очистка связанных данных), TRUNCATE её обойдёт.
  • FOREIGN KEY блокирует TRUNCATE — даже если дочерняя таблица пустая, наличие FK ограничения не позволяет TRUNCATE родительскую таблицу. Нужно SET FOREIGN_KEY_CHECKS=0 (опасно) или удалять в правильном порядке.
  • DELETE без WHERE на большой таблице — эквивалентно TRUNCATE по результату, но генерирует огромный undo log и binlog, блокирует параллельные запросы на долгое время.
  • DROP в скрипте миграции без IF EXISTS — если таблица уже удалена, скрипт упадёт. Всегда использовать DROP TABLE IF EXISTS в миграциях.
  • innodb_file_per_table и DROP — при включённом innodb_file_per_table (дефолт MySQL 5.6+) DROP физически удаляет .ibd файл. Это может освободить место на диске, чего TRUNCATE тоже достигает (пересоздание).
  • Репликация и TRUNCATE — на statement-based репликации TRUNCATE реплицируется как DDL-событие и применяется к реплике немедленно без возможности фильтрации по строкам.
  • Параллельный SELECT во время DELETE — MVCC позволяет читателям видеть старые версии строк во время DELETE, но длинная транзакция DELETE удерживает undo log и замедляет всю систему.

Типичные ошибки

  • Не уточнять storage engine и говорить о delete, truncate и drop так, будто MyISAM и InnoDB ведут себя одинаково.
  • Игнорировать implicit commit, autocommit, isolation level или binlog там, где они меняют ответ.
  • Описывать PostgreSQL-поведение как MySQL-поведение.
  • Забывать проверить план через EXPLAIN и фактическую версию MySQL.

Что проверяет интервьюер

  • Кандидат объясняет delete, truncate и drop через реальный механизм MySQL, а не общими словами.
  • Приводит корректный SQL или диагностический запрос для этой СУБД.
  • Называет ограничения, версионные отличия или эксплуатационные последствия.
  • Связывает ответ с проектированием приложения, производительностью, надежностью или безопасностью.

Как вы знаете этот вопрос?

Проверить себя по теме MySQL →

Источники

  • https://dev.mysql.com/doc/refman/8.4/en/delete.html
  • https://dev.mysql.com/doc/refman/8.4/en/truncate-table.html
  • https://dev.mysql.com/doc/refman/8.4/en/drop-table.html
←Предыдущий вопросЧто такое составной индекс (composite index) и как работает правило левого префикса?Следующий вопрос→Что такое deadlock в MySQL и как движок его обнаруживает и разрешает?

Связанные темы

MySQLschema-operationssql-safety

Вакансии с этим навыком

  • Senior Full-Stack Engineer (NestJS and React) (#6021)
  • Senior Database Administrator
  • Programista Backend / Software Engineer
  • Engineer II - DBA Engineer
  • Senior Full-Stack Engineer

Частые вопросы на собеседовании

  • Как предотвратить SQL injection при работе с MySQL?
  • Как делать backup/restore и point-in-time recovery через binary logs?
  • Что такое MySQL и каковы его основные области применения?
  • Что такое транзакции в MySQL и как их использовать?