关于自增列引发的并发性问题
现象:
1、数据窗口提交时报sqlcode=-3 ;
2、对数据窗口中的数据进行修改或删除,后来却发现修改或删除到了其它的数据 ;
3、从数据窗口中取出自增列作为key进行其它操作,发现得到的数据并非自己想要的。
原因:
当一个数据窗口以自增列为key column,它在新增行后提交时,数据库产生一自增值,然后先写入数据库,再从数据库中提取出来放回datawindow,而提取的这个值是取最后生成的自增值,如果在产生与取回之间有其它的列插入,那么取值就会出错,并且是一种无法回避的错误。
解决方法:
1、将数据窗口的update属性为设为 “key and updateable columns”,数据不会被保存,但会出现“现象1”的问题,在并发性强的场合这种提示可用“频繁”来形容,很难被用户接受。
2、将数据窗口update属性为设为 “key”,数据可以被保存,但如果要在不重新retrive的情况下对datawindow中的数据进行操作的话,将出现“现象2”与“现象3”的问题;出现数据错误我想是每一个程序员都不能容忍的吧。
3、重新设计表结构与数据窗口,使用可控字段作为主键,能解决问题,但如果产品成型,改动太大。
4、……
还请大家一起来讨论有没有更好的解决办法。