客户端访问并发错误
数据窗口中有二种更新方式选择:
1:以主键值:举例说明吧假如:A,B两操作员,同时操作一条记录,记录为001,100
其中001为主键,那么假如A将100改为200,此时B也将100改为300,提交的时候,假如A处理先,就会改为300了。
2:以所有字段:这种的话,当上述例子B开始更新的时候,100已经改为200了,B更新失败。
请教下高手遇到这种问题该怎么解决啊?谢谢~!
我现在的情况是:假如a和b两个人同时在同一张网页上提交数据的话,那么在数据库中后点保存的人的数据就覆盖了先点保存人的数据。
跪求解决办法~!~!~!
------解决方案--------------------
并发控制...你需要了解事务、加锁和隔离的概念...
以下四种隔离级别,根据你的需求选择...
脏读: 读数据时不加锁。
提交读: 在读数据之前加一个读锁,读完之后释放锁。
可重复读: 在读数据之前加一个读锁,读完之后不释放锁,直到事务rollback或者commit后才释放锁。
串行化读: 在读数据之前在读取的条件上加锁(称为条件锁),读完之后不释放锁,直到事务rollback或者commit后才释放锁。
------解决方案--------------------
1,维护一个全局的数组,记录谁在修改哪条记录
2,数据表里增加状态(是否被编辑),开始编辑时间,编辑用户的SESSION ID
查询数据
if(!编辑中)
{
提出数据编辑;更改编辑状态为编辑中;记录当前时间;记录当前SESSION ID
}
else
{
if(当前时间-记录中的开始编辑时间>超时时间)
{
//视为操作超时
提出数据编辑;更改编辑状态为编辑中;记录当前时间;记录当前SESSION ID
}
}
保存修改数据
把修改后的数据和SESSIONID一起传到存储过程中,如果参数 SESSION ID与所存储的SESSION ID不同,则存储失败
查询和存储都用存储过程来写
上面仅是我的一点想法,不知道说的可行不可行,也不知道能不能说明白,呵呵