Я работаю над школьным проектом и не могу понять, как правильно установить этот тип триггера в моей базе данных.
Мне нужно управлять таблицей резервирование .
Можно сделать заказ на определенный день (Дата) в указанное c время начала.
На основании запрошенных пользователем услуг, резервирование будет также иметь время окончания, которое рассчитывается как сумма каждой запрошенной услуги.
Я хотел бы создать триггер (или что-то еще), которое не позволяет пользователю вставлять резервирование, если нет возможности для этого указанного c дня в этот указанный c час.
Например, приведение ссылки на таблицу ниже Я не хочу разрешать вставку резервирования между 10:30 и 11:00 08/22/19.
Это пример таблицы:
| id |Customer| Date | startTime | endTime |
|----|--------|------------|---------------|----------|
| 1 | 1 | 08/22/19 | 10:30:00 | 11:00:00 |
| 2 | 2 | 08/22/19 | 12:30:00 | 13:30:00 |
| 3 | 3 | 09/22/19 | 10:30:00 | 10:45:00 |
Это запрос, который я написал для вставки в таблицу:
INSERT INTO reservation(Customer, Date, startTime, endTime) VALUES
((SELECT id from customer WHERE id='1' ), '08/22/19', '103000', '103000'); #endTime is initialized as startTime
Это триггер, который я пытался запустить:
DROP TRIGGER IF EXISTS CheckHour;
DELIMITER $$
CREATE TRIGGER CheckHour AFTER INSERT ON reservation
FOR EACH ROW
BEGIN
IF
EXISTS( SELECT *
FROM reservation
GROUP BY new.Date, new.startTime
HAVING COUNT(new.Date) > 1 AND COUNT(new.startTime) > 1)
THEN
DELETE FROM reservation WHERE id = new.id;
SIGNAL sqlstate '20000' SET MESSAGE_TEXT = 'DUPLICATED RESERVATION';
END IF;
END;
$$
DELIMITER ;
Что происходит, как только когда я вставляю в резервацию, я получаю эту ошибку:
Error Code: 1442. Can't update table 'reservation' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 0.000 sec
Я был бы очень признателен, если бы вы могли мне помочь, даже с другим подходом. Большое спасибо!