Каждый должен был об этом услышатьMySQL
курок,Его концепция заключается в следующем
Это особый вид процесса,Когда появляются табличные данныеДобавить, обновить, удалитьчас,Это запускает процесс хранилища.
Поэтому его называют триггером. Давайте посмотрим на использование триггеров!
-- удалить
drop trigger Имя триггера;
-- Определить конечный символ
delimiter $$
-- создавать
create trigger Имя триггера before|after insert|update|delete on имя таблицы for each row
begin
Выполнить оператор
end$$
-- Определить конечный символ
delimiter ;
существовать Выполнить операторсередина,Это почти то же самое, что и обычный процесс хранилища.,Однако у триггера есть еще два объекта, которых нет у процесса.,Они есть
NEW
иOLD
; OLD:представляет обновление,удалитьпредыдущие данные,может пройтиOLD.Имя поля
чтобы получить предыдущее значение NEW:Представляет собой новый,обновленные данные,может пройтиНОВИНКА.Имя поля
чтобы получить будущие значения Чтосередина То же, что описано выше,Новый типкурок НетOLD
,удалитьтипкурок НетNEW
,И триггеры обновления имеют оба
Ладно, после введения грамматики перейдем непосредственно к самому бою;
Во-первых, давайте создадим таблицу пользователей. Требования очень просты. Если возраст меньше 12 лет, будет сообщено об ошибке, и операция будет запрещена.
CREATE TABLE `sys_user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(255) DEFAULT NULL COMMENT 'Имя',
`age` tinyint(4) DEFAULT NULL COMMENT 'возраст',
`gender` tinyint(1) DEFAULT NULL COMMENT 'пол',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Итак, как использовать триггеры для выполнения вышеуказанных функциональных требований? Конкретные триггеры следующие:
DROP TRIGGER IF EXISTS `user_info_insert`;
DROP TRIGGER IF EXISTS `user_info_update`;
delimiter $$
CREATE TRIGGER `user_info_insert` AFTER INSERT ON `sys_user_info` FOR EACH ROW
BEGIN
IF NEW.age<12 THEN
SIGNAL SQLSTATE 'BY000' SET MESSAGE_TEXT = «Возраст не менее 12 лет»;
END IF;
END$$
CREATE TRIGGER `user_info_update1` AFTER UPDATE ON `sys_user_info` FOR EACH ROW
BEGIN
IF NEW.age!=OLD.age and NEW.age<12 THEN
SIGNAL SQLSTATE 'BY000' SET MESSAGE_TEXT = «Возраст не менее 12 лет»;
END IF;
END$$
delimiter ;
После создания проверим эффект
Хотя триггеры имеют свои ограничения, с определенной точки зрения они действительно хороши.
За то время, что я прошел, он мог выполнять следующие практические функции:
Функция триггера также может делать много вещей,Ключ зависит от того, как вы его используете,Соедините это с кодом и получите вдвое больший результат, прилагая вдвое меньше усилий!
Я Бан Юэ, желаю вам счастья! ! !