Скасування вставки в тригері mysql, softodom - блог про програмування, софт, інтернеті і it

Проста ситуація коли вішаємо тригер на вставку даних в таблицю і в цьому тригері визначаємо треба вставляти ці дані чи ні. У випадку з MySQL все виявилося не просто.

Проблема в тому, що скасувати запит в тригері MySQL тривіальним чином не можна. У тій же MS SQL Server є тригери INSTEAD OF і досить просто прописати в тригері ROLLBACK. що б скасувати вставку, але в MySQL команди транзакцій використовувати в тригерах можна.

Чи можна тригером в MySQL коректно скасувати запис рядка в базу? Потрібен тригер забороняє вставку. Є кілька способів вирішення цієї проблеми.

Виклик помилки в тригері

Викликавши помилку в тригері можна скасувати виконання запиту викликав тригер.
На жаль, в тригерах MySQL зараз немає можливості коректно відкотити транзакцію.
Найкраще (незважаючи на те, що воно жахливо) рішення зараз - зробити якусь помилку.

Табличка з довгою назвою, звичайно, не повинна існувати. Виглядає як милицю, милицю і є.

Видалення поточного потоку

Тригер: Before Insert, Before Update, Before Delete.

Виклик процедури з тригера

тригер before insert - OLD в ньому немає. Якщо нічого не потрібно робити - RETURN null;

Такі справи в загальному.