日期:2014-05-17  浏览次数:20777 次

JAVA ORACLE 并发操作 数据一致性 查看与更改
假如ORACLE中有T1和T2两张表,T1表有A设备    
   王用户和张用户 同时查询了A设备的ID和NAME显示在页面上   
       王用户在页面对A设备进行了删除操作,之后,由于张用户页面上还有A设备,当张用户取得页面上A设备的ID并添加进T2表中时,T2表中的此条记录肯定对应不上T1表中的A设备,所以成为了无效数据

如何避免这种状况?  锁貌似不管用,张用户并没有对T1中的A设备做操作。  如果在插入T2表时先查询此ID是否存在,貌似有点多余和麻烦,而且如果数据多的话,查询需要时间,在查询过程中删除了A设备(查询的机制扫描过A设备后做的删除操作,这样查询的结果中有A,但是数据库中A已经不存在),也会出现这种情况。
------解决方案--------------------
要么做个查询,要么添加外键约束!
------解决方案--------------------
在写入T2表之前,先查询T1表,并且使用forupdate加锁,就可以保证不会出现你说的那种情况。

当然添加外键约束是最简单的办法。