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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

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

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

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

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

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

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

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Что такое хранимые процедуры (stored procedures) и триггеры (triggers) в MySQL и каковы их плюсы и минусы?

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

Хранимые процедуры — именованные блоки SQL-кода на сервере, вызываемые явно через CALL. Триггеры — процедуры, автоматически выполняемые при INSERT/UPDATE/DELETE. Оба инструмента снижают сетевой трафик, но усложняют сопровождение и тестирование.

Хранимые процедуры (Stored Procedures)

Процедура — именованная программа на диалекте SQL/PSM, вызываемая явно командой CALL. Поддерживает входные (IN), выходные (OUT) и двунаправленные (INOUT) параметры.

DELIMITER $$

CREATE PROCEDURE transfer_funds(
    IN  p_from   INT,
    IN  p_to     INT,
    IN  p_amount DECIMAL(12, 2),
    OUT p_status VARCHAR(50)
)
BEGIN
    DECLARE v_balance DECIMAL(12, 2);

    START TRANSACTION;

    SELECT balance INTO v_balance
    FROM accounts
    WHERE id = p_from
    FOR UPDATE;

    IF v_balance < p_amount THEN
        ROLLBACK;
        SET p_status = 'INSUFFICIENT_FUNDS';
    ELSE
        UPDATE accounts SET balance = balance - p_amount WHERE id = p_from;
        UPDATE accounts SET balance = balance + p_amount WHERE id = p_to;
        COMMIT;
        SET p_status = 'OK';
    END IF;
END$$

DELIMITER ;

-- Вызов
CALL transfer_funds(1, 2, 500.00, @result);
SELECT @result;

Хранимые процедуры и триггеры в MySQL

Оба объекта хранятся в базе данных и выполняются на стороне сервера MySQL, что уменьшает сетевой трафик и позволяет централизовать бизнес-логику. Однако они же создают скрытые зависимости и затрудняют отладку.

Триггеры (Triggers)

Триггер автоматически срабатывает до (BEFORE) или после (AFTER) операции INSERT, UPDATE или DELETE. Внутри триггера доступны псевдозаписи NEW (новые значения) и OLD (старые значения).

DELIMITER $$

-- Аудит изменений цены
CREATE TRIGGER trg_product_price_audit
AFTER UPDATE ON products
FOR EACH ROW
BEGIN
    IF OLD.price <> NEW.price THEN
        INSERT INTO price_history (product_id, old_price, new_price, changed_at)
        VALUES (NEW.id, OLD.price, NEW.price, NOW());
    END IF;
END$$

-- Валидация перед вставкой
CREATE TRIGGER trg_check_stock
BEFORE INSERT ON order_items
FOR EACH ROW
BEGIN
    DECLARE v_stock INT;
    SELECT stock INTO v_stock FROM products WHERE id = NEW.product_id;
    IF v_stock < NEW.quantity THEN
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'Insufficient stock';
    END IF;
END$$

DELIMITER ;

Просмотр существующих объектов

-- Список процедур
SHOW PROCEDURE STATUS WHERE Db = 'shop';

-- Тело процедуры
SHOW CREATE PROCEDURE transfer_funds;

-- Список триггеров
SHOW TRIGGERS FROM shop;

-- Удаление
DROP PROCEDURE IF EXISTS transfer_funds;
DROP TRIGGER IF EXISTS trg_product_price_audit;

Плюсы

  • Меньше сетевых round-trip: сложная логика выполняется за один вызов.
  • Переиспользование: несколько приложений (бэкенд, скрипты, ETL) используют одну процедуру.
  • Триггеры гарантируют целостность данных на уровне БД — независимо от того, какое приложение делает изменение.
  • Контроль доступа: можно выдать EXECUTE на процедуру без прямого доступа к таблицам.

Минусы

  • Сложность отладки: нет нормального debugger'а, логирование через временные таблицы или SELECT.
  • Процедуры и триггеры не покрываются обычными unit-тестами приложения.
  • Бизнес-логика размазана между приложением и БД — усложняет понимание системы.
  • Сложно вести в системе контроля версий (миграции нужны и для процедур).
  • Масштабирование: процедуры выполняются на сервере БД, увеличивая нагрузку на него.

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

  • Триггер, вызывающий исключение SIGNAL, откатывает всю транзакцию — побочный эффект может удивить разработчиков приложения.
  • Рекурсивные триггеры по умолчанию запрещены (@@global.trigger_recursion_depth = 0) — цепочки UPDATE внутри триггера не сработают.
  • Триггеры BEFORE UPDATE могут изменять NEW, триггеры AFTER — нет; путаница приводит к незаметным отказам логики.
  • При LOAD DATA INFILE и INSERT ... SELECT триггеры FOR EACH ROW срабатывают на каждую строку — значительная нагрузка при batch-операциях.
  • Процедуры не кешируют план запроса между вызовами в одной сессии при изменении схемы — кеш инвалидируется.
  • Забытый DELIMITER $$ при создании многострочных процедур через консоль приводит к синтаксической ошибке.
  • Права: DEFINER по умолчанию — создавший процедуру пользователь; если его удалить, процедура перестаёт работать.
  • MySQL не поддерживает функции, возвращающие таблицы (table-valued functions) — в отличие от PostgreSQL.

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

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

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

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

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

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

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

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

Источники

  • https://dev.mysql.com/doc/refman/8.4/en/create-procedure.html
  • https://dev.mysql.com/doc/refman/8.4/en/create-trigger.html

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

MySQLdatabase-designmaintainability

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

  • Senior Software Engineer II, Payments
  • Senior Product Engineer - Listing Quality
  • Senior Staff Software Engineer
  • Senior Consultant / Associate Manager in Data Science - AI Engineering
  • Java Developer - BI