数据库的并发处理问题归纳

第一种方法:

仅用数据库事物恐怕不能解决问题,应该是数据库事务+加排它锁,可以防止,脏读、不可重复读、幻读。

SQL Server 中可以:

BEGIN TRAN

SELECT @maxid = max(id)+1 FROM test(XLOCK,PAGLOCK)

COMMIT TRAN

XLOCK 使用排它锁并一直保持到由语句处理的所有数据上的事务结束时。使用PAGLOCK或TABLOCK指定该锁,保证其它查询被堵塞。

第二种方法:用数据库中用存储过程解决,借助数据库本身的并发控制机制

@newID int out

update sequence_table

set @newID = nowid + 1,

nowid = nowid + 1

where key = 'orderPrimarykey'

return @newID

你可能感兴趣的:(sql,SQL Server)