导入并发问题
数据库表中有一列是流水码,流水码不允许重复,在每插入一条记录时,先读取最大记录的流水码,把取得的流水码加1,作为即将插入记录的流水码,在多个人批量导入操作的时候,会出现流水码重复的现象,
怎么解决流水码重复的问题?如果是加"lock",应该加在哪里,是读取流水码的时候,还是写入的时候,还是其他地方,下面是简单模拟了一下业务代码:
///读取流水码
private void GetMaxCode();
///批量导入
private void import()
{
///写入流水码
for(int i=0;i<=record;i++)
{
GetMaxCode();
private void insert();
}
}
insert table id values((select max(id) from table)+1)
private static object lockflag = new object();
private string GetMaxCode()
{
lock(lockflag)
{
return GetMyMaxCode();
}
}