我们正在开发在线日程应用程序。一个时间表可以由多个用户同时编辑。有一个非常重要的业务约束。一天内必须只有三个事件。
从技术上讲和简化,数据库中有一个带有列的表:| 编号 | 活动 | 日期|。应用程序在事务“select...count...where...”中运行,如果结果小于 3,则插入新事件。
可以使用哪些方法来保证两个线程不会在一天内创建四个事件?这是一个经典的 check-and-write 问题。我们想知道如何在数据库级别解决它?
使用事务并不能保证在第二个事务中另一个线程不会做同样的事情:检查事件数是否小于 3 并进行插入。锁定整个表是不可接受的,因为它会减少响应时间、并发性等。
应用程序是使用 Spring、Hibernate、MySQL 用 Java 开发的。
提前感谢您的任何建议。