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

导入并发问题
数据库表中有一列是流水码,流水码不允许重复,在每插入一条记录时,先读取最大记录的流水码,把取得的流水码加1,作为即将插入记录的流水码,在多个人批量导入操作的时候,会出现流水码重复的现象,
怎么解决流水码重复的问题?如果是加"lock",应该加在哪里,是读取流水码的时候,还是写入的时候,还是其他地方,下面是简单模拟了一下业务代码:



///读取流水码
private void GetMaxCode();

///批量导入
private void import()
{
///写入流水码
for(int i=0;i<=record;i++)
{
GetMaxCode();
   private void insert();

}
}

------解决方案--------------------
插入数据读取最大的一个流水号的这个操作不要在程序里分为两步写,写到一条sql里
不知道写的对不对啊,大概是这个思路:

insert table id values((select max(id) from table)+1)

------解决方案--------------------
流水号对于多进程来说是公用变量,操作不加锁是不行的。
------解决方案--------------------
少写了一个static,修改一下
private static object lockflag = new object();
 
private string GetMaxCode()
{
    lock(lockflag)
    {
        return GetMyMaxCode();
    }   
}