MySQL trigger Помогите с триггером, хочу чтобы при заполнении одной таблицы - на основании этих данных, шло обновление в другой таблице

     booking
 +----+--------+-------+----------+-------------------+--------+----------+------------+------------+---------------------+
    | id | fname  | lname | pname    | phone             | korpus | myRoomId | dateIn     | dateOut    | bookedIn            |
    +----+--------+-------+----------+-------------------+--------+----------+------------+------------+---------------------+
    |  1 | Иванов | Иван  | Иванович | +7(999)-999-99-99 |      1 |      201 | 2021-03-29 | 2021-03-30 | 2021-05-18 20:26:25 |
    |  2 | Иванов | Иван  | Иванович | +7(999)-999-99-99 |      1 |      201 | 2021-03-29 | 2021-03-30 | 2021-05-18 20:31:41 |
    |  3 | Иванов | Иван  | Иванович | +7(999)-999-99-99 |      1 |      201 | 2021-03-29 | 2021-03-30 | 2021-05-18 20:34:05 |
    +----+--------+-------+----------+-------------------+--------+----------+------------+------------+---------------------+


allRooms_1k;
+-----------+---------+---------+
| roomId_1k | type_1k | free_1k |
+-----------+---------+---------+
|       201 |       2 |       2 |
|       202 |       2 |       2 |
|       203 |       2 |       2 |
|       204 |       2 |       2 |
|       205 |       2 |       2 |
|       206 |       2 |       2 |
|       207 |       2 |       2 |
|       208 |       2 |       2 |
|       209 |       2 |       2 |
|       210 |       2 |       2 |
|       211 |       2 |       2 |
|       212 |       2 |       2 |
|       213 |       2 |       2 |
|       214 |       2 |       2 |
|       215 |       2 |       2 |
|       216 |       2 |       2 |
|       217 |       2 |       2 |
|       218 |       2 |       2 |
|       219 |       2 |       2 |
|       220 |       2 |       2 |
+-----------+---------+---------+
allRooms_2k;
+-----------+---------+---------+
| roomId_2k | type_2k | free_2k |
+-----------+---------+---------+
|       201 |       2 |       2 |
|       202 |       2 |       2 |
|       203 |       2 |       2 |
|       204 |       2 |       2 |
|       205 |       2 |       2 |
|       206 |       2 |       2 |
|       207 |       2 |       2 |
|       208 |       2 |       2 |
|       209 |       2 |       2 |
|       210 |       2 |       2 |
|       211 |       2 |       2 |
|       212 |       2 |       2 |
|       213 |       2 |       2 |
|       214 |       2 |       2 |
|       215 |       2 |       2 |
|       216 |       2 |       2 |
|       217 |       2 |       2 |
|       218 |       2 |       2 |
|       219 |       2 |       2 |
|       220 |       2 |       2 |
+-----------+---------+---------+

DELIMITER |
CREATE TRIGGER bookingRooms AFTER UPDATE ON booking
       FOR EACH ROW
       BEGIN
           IF NEW.korpus = 1 THEN
               UPDATE testt.allRooms_1k SET free_1k=free_1k-1 WHERE allRooms_1k.roomId_1k=NEW.myRoomId;
           ELSEIF NEW.korpus = 2 THEN
              UPDATE testt.allRooms_2k SET free_2k=free_2k-1 WHERE allRooms_2k.roomId_2k=NEW.myRoomId;
           END IF;
       END;
    |
DELIMITER ;

Доброго времени суток!

Подскажите пожалуйста, что я делаю не так?

Требуется чтобы изменилась таблица allRooms_1k или allRooms_2k в зависимости от корпуса который вводится в таблицу booking

Если в бронировании вводится 1 корпус 210 комната, то из таблицы allRooms_1k в поле free_1k идет вычитание -1 у той комнаты, что введена в booking, если вводится 2 корпус 220 комната, то из таблицы allRooms_2k в поле free_2k идет вычитание -1 соответственно

Может кто знает где есть подобные примеры? Буду рад любой информации


Ответы (1 шт):

Автор решения: Константин
DELIMITER |
CREATE TRIGGER b AFTER INSERT ON booking
FOR EACH ROW
BEGIN
IF NEW.korpus = 1 THEN
UPDATE testt.allRooms_1k SET free_1k=free_1k-1 WHERE allRooms_1k.roomId_1k=NEW.myRoomId;
ELSEIF NEW.korpus = 2 THEN
UPDATE testt.allRooms_2k SET free_2k=free_2k-1 WHERE allRooms_2k.roomId_2k=NEW.myRoomId;
END IF;
END;
|
DELIMITER ;
→ Ссылка