根据当前值阻止在数据库中插入

时间:2013-07-19 16:14:12

标签: java sql-server-2005

我正在开发一个预订或预订系统。在我的表单中,我进行ajax调用以检查是否有可用空间并在它们已满时禁用它们。不幸的是,有一些空间可用,10个尝试提交响应,它超过分配的空间1或2.

我不期望任何代码或查询,但指导如何防止这种情况?

3 个答案:

答案 0 :(得分:0)

在互斥交易中包装“是否有可用空间/预留空间”,以便最多一个客户端可以检查/预留空间。是的,许多请求都会等待,但如果关键部分很小,整个等待时间可以忽略不计。

答案 1 :(得分:0)

您无法与客户端技术实现可靠的同步,您将不得不深入挖掘堆栈。 您应该在稍后阶段推迟此检查,并在服务器端(在java,c#等中)或在存储过程中处理它。 使用您的javascript进行初步检查:如果没有可用空间,请立即禁用该表单。但是,如果有可用空间,表单将显示为启用但以后可能会在您的Java代码或存储过程中失败。该阶段应该是同步的,并且如果您因为刚刚为客户提供服务而检测到没有空间,则向其他人返回错误消息,即使他们已经看过启用的表单。

答案 2 :(得分:0)

我想锁定部分在DB中完成。 读取事务提供的许多隔离级别对于此特定部分,可重复读取的内容应该可以解决问题。 旨在确保DB即使对于读取操作也能获取锁定。 您可以为此编写存储过程,或者甚至可以在“应用程序”层中执行此操作。 完成后不要忘记重置事务级别。

相关问题