Проста ситуація коли вішаємо тригер на вставку даних в таблицю і в цьому тригері визначаємо треба вставляти ці дані чи ні. У випадку з MySQL все виявилося не просто.
Проблема в тому, що скасувати запит в тригері MySQL тривіальним чином не можна. У тій же MS SQL Server є тригери INSTEAD OF і досить просто прописати в тригері ROLLBACK. що б скасувати вставку, але в MySQL команди транзакцій використовувати в тригерах можна.
Чи можна тригером в MySQL коректно скасувати запис рядка в базу? Потрібен тригер забороняє вставку. Є кілька способів вирішення цієї проблеми.
Виклик помилки в тригері
Викликавши помилку в тригері можна скасувати виконання запиту викликав тригер.
На жаль, в тригерах MySQL зараз немає можливості коректно відкотити транзакцію.
Найкраще (незважаючи на те, що воно жахливо) рішення зараз - зробити якусь помилку.
Табличка з довгою назвою, звичайно, не повинна існувати. Виглядає як милицю, милицю і є.
Видалення поточного потоку
Тригер: Before Insert, Before Update, Before Delete.
Виклик процедури з тригера
тригер before insert - OLD в ньому немає. Якщо нічого не потрібно робити - RETURN null;
Такі справи в загальному.