Как написать триггер на 2 таблицы? - MySQL

Узнай цену своей работы

Формулировка задачи:

Хочу написать триггер, который будет для определенного ФИО, и при полученном результате, изменять результат. Существуют 2 таблицы: Таблица `tbl_name` содержит ФИО, и ID_ФИО Таблица `tbl_result` содержит ID_оценки, ID_ФИО, Оценка Структура таблицы `tbl_name`
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`)
)
Структура таблицы `tbl_result`
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`)
)
Пример: Иван Иванов получил 2, триггер должен изменить на 5 для Ивана Иванова результаты в таблице `tbl_result`. То, что попытался:
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`="Иван"));

Объяснение кода листинга программы

  1. Создается переменная SET @isset := EXISTS(
  2. Выполняется запрос SELECT name_id
  3. Запрос производится из таблицы tbl_name
  4. Запрос фильтрует строки, где fam равно Иванов и name равно Иван
  5. Значение переменной @isset становится равным результату запроса EXISTS, то есть количеству строк, удовлетворяющих условию запроса.
  6. Значение переменной @isset будет равно 1, если найдется хотя бы одна строка, удовлетворяющая условию, и 0 в противном случае.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы