【发布时间】:2018-05-08 03:25:43
【问题描述】:
我们有:
- 一张桌子
Room - 一张桌子
Person - 中间表
PersonRoom
在Room 中,我的最大值为Person,对应于可以进入房间的最大人数。
像这样:
Room
id
maximum_persons
Person
id
name
PersonRoom
id
room_id
person_id
每当一个“my_person_id”的人想进入一个“my_room_id”的房间时,我应该这样做:
INSERT INTO PersonRoom (room_id, person_id)
VALUES (my_room_id, my_person_id)
但是如果房间已满,我应该不能插入一个人,即我应该做类似的事情(我知道这是无效的 SQL):
@TOTAL = SELECT COUNT(*) FROM PersonRoom
WHERE room_id = my_room_id;
IF @TOTAL < (SELECT maximum_persons) FROM Room WHERE id = my_room_id:
INSERT INTO PersonRoom (room_id, person_id)
VALUES (my_room_id, my_person_id)
我想在数据库端处理这个
- 是否有针对 SQLite 的解决方案?如果没有,是否有针对 PostgreSQL 的解决方案
- SQL 是什么?
- 如果我在一次交易中这样做,如果有很多人尝试同时注册同一个房间,是否会 100% 安全?
【问题讨论】:
标签: sql postgresql sqlite