Робота з trigger (тригерами) в mysql - за чистий і ясний код!
Передмова
Тригери це особливі процедури які спрацьовують при зміні даних в таблиці операторами INSERT. UPDATE і DELETE.
Тригери можуть спрацьовувати як до BEFORE так і після AFTER зміни таблиці. Виходить, що тригер може бути в 6 станах.
Що необхідно для роботи
Сервер БД версії 5.0.2 і вище
привілеї на використання цієї ф-ції (TRIGGER) починаючи з версії 5.1.6, до цього було SUPER, але тому що все локально використовують користувача root, то боятися нічого
Додавання тригера
Для того щоб зрозуміти роботу тригера необхідний приклад.
Необхідно при додаванні запису в табл user. пароль перетворювати в хеш md5 (). також ім'я та по батькові перетворювати в ініціали.
Тепер вставляємо туди запис
Що тепер в таблиці
Як видно лише кількома рядками можна прибрати цілі методи, які ми використовували при реєстрації нового користувача. Тепер ще треба створити тригер на UPDATE таблиці, з таким же тілом, щоб користувач не зміг записати повне ім'я, по батькові та пароль не в МД5 ();
Створення тригера на BEFORE UPDATE
Можуть виникнути питання, що таке NEW в тілі тригера,
NEW - для доступу до нових записів
OLD - для доступу до старих записів
Напімер, якщо я оновив прізвище, то нове значення мені доступно через NEW.fam. а до старого OLD.fam
зміна тригера
А ось команди по зміні тригера я не знайшов і був здивований, почитав форуми, так і є - її просто немає ((
видалення тригера
Для видалення тригера використовується, як зазвичай оператор DROP. приклад
де
schema_name - назва БД,
trigger_name - назва тригера
Список створених тригерів
Показати тригер можна за допомогою команди
Це повна частина команди, в основному користуються командами:
Ось що ми побачимо, коли виконаємо команду
Хороший асортимент вибору книг, електроніки, побутової техніки, посуду, подарунки, сувеніри і багато іншого Ви можете зробити на сайті компанії E5.RU. Купити фільми на dvd в фірмовій упаковці і зробити хороший подарунок рідним і близьким, Ви можете там же.
Як призупинити виконання SQL після тригера?
Тобто, за певних умов, описаних в тригері треба зупинити виконання SQL який і викликав цей тригер.
Єдине що в мене вийшло, це виконувати хибний SQL-код, тим самим зупиняти виконання SQL коду, який виконається після тригера.
text_status - у мене enum і у нього немає значення STOP_SQL_HACK, тому відбувається помилка і SQL не виконується.
PS Цей каммент тільки заради крос-посилання?
Соррі, пропустив. Можете видалити.
Здрастуй Макс. Чи не нашол в гуглі вільної зв'язку з Вами ... всюди потрібна реєстрація.
Потрібно додати тригер або. до плагіну коментарів Вордпресс, тобто щоб користувач зобов'язаний був поставити час через яке коментар віддалиться автоматично. Сергій 0507089682
А чи можна робити вставку даних в за допомогою тригера в іншу таблицю?
Тобто мені потрібно після INSERT INTO `A` values (1, # 'test #', # 'test #');
SET @id: = LAST_INSERT_ID ();
додати запис в іншу таблицю b але при цьому використовувати @id з таблиці A.
Пробуйте! Дізнаєтеся багато нового.
У Вашому прикладі створюються 2 тригера з однаковим виконавчим кодом на події BEFORE INSERT і BEFORE UPDATE, а чи не можна в другому випадку (BEFORE UPDATE) замість створення функціональної копії послатися на вже готовий тригер під BEFORE INSERT?
Послатися не можна, але можна зробити процедуру в яку будите передавати значення, а в процедурі вже пропишіть запити на оновлення даних. Але в даному прикладі простіше зробити так як я писав, тому що про процедурах в рамках даної статті я не розповідав.
А де писати вихідний код тригера, де зберігається? Наприклад я використовую програму NAvicat для доступу до бази
Вітання! Сool, ти дуже погано прочитав статтю, там все написано, як створювати, видаляти тригер. Якщо у тебе питання по NAvicat, то Новомосковськ довідку за цією програмою, я їй не користуюся.