mysql - 触发器适用于已经触发的记录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个席位。但是在新的记录中,我希望第二届的名额更少。第一届的席位不应被扣除。 在此处输入图像描述
当您将任何记录添加到预订表时,会发生这种情况,不仅为所需的会话更新可用席位的数量,而且为之前更新过席位数量的所有会话更新可用席位的数量。
我还有一个问题。如何使预订表中特定会话的座位号唯一,以使该座位不能被其他用户占用?但是这样可以为另一个会话保留这个地方。 在此处输入图像描述
谢谢,我希望我能清楚地解释问题:
解决方案
推荐阅读
- algorithm - 来自小范围的随机数,没有多次重复
- antlr - 所有 ANTLR 访问者方法的通用返回类型
- firebase - 在 Firebase 中,我是否应该将定期更新的帖子和用户数据(收藏夹、投票...)与主集合分开?
- sql - 日期列之间的 SQL 字段不为空
- clojure - 何时使用 Datomic Upsert?
- regex - 在文本的特定位置插入“,”
- python - 如何使用python计算数据框中每20个数据点的基本统计数据?
- python - ThreadPoolExecutor 在迭代之间保留线程本地数据?
- javascript - 如何运行和读取 NodeJS 的 bluetoothctl 命令输出?
- react-native - 来自 props url 的无效调用