Как написать триггер на 2 таблицы? - MySQL
Формулировка задачи:
Хочу написать триггер, который будет для определенного ФИО, и при полученном результате, изменять результат.
Существуют 2 таблицы:
Таблица `tbl_name` содержит ФИО, и ID_ФИО
Таблица `tbl_result` содержит ID_оценки, ID_ФИО, Оценка
Структура таблицы `tbl_name`
Структура таблицы `tbl_result`
Пример:
Иван Иванов получил 2, триггер должен изменить на 5 для Ивана Иванова результаты в таблице `tbl_result`.
То, что попытался:
CREATE TABLE IF NOT EXISTS `tbl_name` ( `id_name` int(11) NOT NULL AUTO_INCREMENT, `fam` varchar(50) NOT NULL, `name` varchar(50) NOT NULL, `otsh` varchar(50) NOT NULL, PRIMARY KEY (`name_id`) )
CREATE TABLE IF NOT EXISTS `tbl_result` ( `id_res` int(11) NOT NULL AUTO_INCREMENT, `id_name` int(11) NOT NULL, `result` int(11) NOT NULL, PRIMARY KEY (`id_res`) )
CREATE TRIGGER `qqq` BEFORE UPDATE ON `tbl_result` FOR EACH ROW BEGIN SET @isset := EXISTS( SELECT `name_id` FROM `tbl_name` WHERE (`fam`="Иванов" AND `name`="Иван")); IF ((@isset NOT NULL)AND(OLD.result <=2)) THEN SET NEW.result =5; WHERE id_name=@isset; END IF; END ;
Решение задачи: «Как написать триггер на 2 таблицы?»
textual
Листинг программы
SET @isset := EXISTS( SELECT `name_id` FROM `tbl_name` WHERE (`fam`="Иванов" AND `name`="Иван"));
Объяснение кода листинга программы
- Создается переменная SET @isset := EXISTS(
- Выполняется запрос SELECT
name_id
- Запрос производится из таблицы
tbl_name
- Запрос фильтрует строки, где
fam
равноИванов
иname
равноИван
- Значение переменной @isset становится равным результату запроса EXISTS, то есть количеству строк, удовлетворяющих условию запроса.
- Значение переменной @isset будет равно 1, если найдется хотя бы одна строка, удовлетворяющая условию, и 0 в противном случае.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д