我遇到了一个非常棘手的问题。 我正在开发一个在线订购系统(在现实世界中发生的事件)。用户在我的站点中订购一个事件(实现是通过写入MYSQL数据库的.NET Web服务实现的)。 2个相关表是:EVENTS和EVENTonFIELD(FIELD是用户订购的资源)。 (用户可以订购一个或多个资源)
我的问题是 - 阻止同时订购相同的资源(可能通过并行调用我的W.S)。该实现是一个MYSQL .NET连接器(在C#中)事务,包括对EVENTS和EVENTonFIELD的插入(以及其他逻辑)。
我遇到的情况是我有事务A和事务B(两者都相同:相同的用户X,资源Y和时间Z)。
执行事务A(在我验证资源可用之后)。 在此期间(tn尚未提交),执行事务B(当我验证资源是否可用时,我发现它是可用的,因为尚未提交tn A)。 然后 - A被提交,B被提交并且:
这个用户有一个双重事件..
我不能在这里使用主键,因为在某些情况下我允许双重资源排序。 任何想法如何防止这种情况?
我唯一想到的是在事务B期间,以某种方式读取并行事务(A)并检查是否存在冲突..这可能吗?
谢谢!