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 ;