首页 > 解决方案 > 触发器适用于已经触发的记录mysql

问题描述

我有个问题。在为电影预订座位时,我有一个触发器会在电影院中减去一个座位:

DROP TRIGGER IF EXISTS trg_reserv;
delimiter $$
CREATE TRIGGER trg_reserv AFTER INSERT ON  reservation
FOR EACH ROW
BEGIN
UPDATE session, reservation
SET number_of_available_seats = number_of_available_seats - 1
WHERE session.id = reservation.idSession;
END$$
delimiter ;

这是会话表没有变化的样子:

在此处输入图像描述 我创建了一个触发器(代码在上面)并在预订表中添加了一个新条目。第一届,第一位参观者预订了第三个座位,第一届现在有299个座位。我在预订表中创建了另一条记录。现在第一届有298个席位:

INSERT INTO reservation VALUES(NULL, 1, 1, 3);
INSERT INTO reservation VALUES(NULL, 1, 1, 4);

在此处输入图像描述

但是,当我在预订表中添加一个为第二个会话预订座位的条目时,第二个会话有 149 个座位。问题是:在第一届会议上,席位也减少了,现在有297个席位。但是在新的记录中,我希望第二届的名额更少。第一届的席位不应被扣除。 在此处输入图像描述

当您将任何记录添加到预订表时,会发生这种情况,不仅为所需的会话更新可用席位的数量,而且为之前更新过席位数量的所有会话更新可用席位的数量。

我还有一个问题。如何使预订表中特定会话的座位号唯一,以使该座位不能被其他用户占用?但是这样可以为另一个会话保留这个地方。 在此处输入图像描述

谢谢,我希望我能清楚地解释问题:

标签: mysql

解决方案


推荐阅读