处理数据库级别的并发问题

时间:2010-11-05 14:48:21

标签: mysql jdbc

如何处理同时访问数据库记录的多个用户,特别是如果您有一个仪器预订表,并且如果他们要在同一时间尝试保留相同的仪器,您希望阻止两个用户保留相同的仪器,我认为将隔离级别设置为serializable应该这样做,但是因为事实证明隔离级别没有这样做,那么如何检测对条目的并发访问并回滚任何更改? 我正在使用JDBC与MYSQL服务器和InnoDB引擎。

感谢

1 个答案:

答案 0 :(得分:1)

我会使用:

显式锁定该行
START TRANSACTION
SELECT ... FROM mytable WHERE id=? FOR UDPATE
...
COMMIT TRANSACTION

在“select for update”和commit之间,没有其他会话能够在该行上执行“select for update”。 (但是如果没有“select for update”之前的其他会话将能够读取其旧状态的行,并且其他会话将能够写入并“选择更新”其他行和其他表。)