防止工作坊预约超额

通过 PostgreSQL 原子化整组预约保护最后的名额,保留原有预约,并在确认写入失败时回滚名额扣减。

项目PostgreSQL数据库

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

防止工作坊预约超额是面向已能查询和修改简单表的学习者的 PostgreSQL 项目课程。你将完成真实预约,复现一个名额产生两条确认的情况,并交付可复用的 SQL,让整组预约全部成功,或完全不改变数据。

两节引导实验讲解正常预约流程、真实锁等待、事务恢复和保存的原子预约语句。一节独立挑战更换活动、人数和柜台操作顺序。每个单元都有独立准备的数据;最终作品是你的 SQL 和真实预约台账。

你将学到什么

  • 将每组已确认预约与准确的人数、剩余容量对应起来。
  • 用两个真实数据库连接复现依据过期余量做出的判断。
  • 完成条件式名额申请,并用 RETURNING 返回的行创建确认。
  • 观察一个请求等待,同时让另一场工作坊继续接受预约。
  • 区分名额不足和 SQL 错误,验证确认写入失败会回滚名额申请。
  • 恢复已中止的事务,保留原有预约、工作坊信息和预备工具。

本课程适合谁

本课程适合希望通过真实数据库操作理解具体并发问题的 SQL 学习者和初级应用开发者。

前置知识:基本终端导航、PostgreSQL 连接,以及 SELECT、WHERE、INSERT 和 UPDATE。事务、行锁、psql 变量、整数类型转换和修改数据的公用表表达式都会在使用前讲解。

学习环境:浏览器中已准备好 PostgreSQL 和合成工作坊数据。Workshop Desk 提供 shell,Desk A 和 Desk B 提供同一台机器上同一数据库的独立原生 psql 连接。你只需编写 SQL,无需开发 Python 程序或网站。

常见问题

需要提前理解数据库锁吗?

不需要。先完成正常预约,再观察受控的超额预约和真实锁等待,最后应用安全方法。课程要求具备上面列出的 SQL 基础。

最终交付什么?

可复用的 reserve.sql 文件和真实的整组预约确认;对每场工作坊,已预约人数加剩余名额应等于容量。功能检查还会保护原有记录,并在不同的隔离数据上运行你未经改写的 SQL。

这是否涵盖完整的生产预约平台?

不涵盖。你将在单个 PostgreSQL 数据库中练习 READ COMMITTED 事务。本项目不涉及支付、自动重试、过期占位和分布式协调。挑战要求独立组合引导实验已经教授的机制。

教师

labby
Labby
Labby is the LabEx teacher.