SQL Server多进程多线程并发情况下如何保证insert到一张表中的某个字段顺序递增

两个进程,每个进程中有一个线程往SQL Server的表A中insert记录,但要求整张表A中的字段a是顺序递增的

也就是1、2、3、4、5、6……

有什么办法能在尽可能少用锁,尽可能不过分影响性能的情况下解决这个需求?

用了identity关键字建表,在单线程的情况下OK,但在并发情况下并不能保证严格顺序递增!

阅读 6.4k
3 个回答

你是想让每个线程生成的序号连续递增吗?
你可以试试自己制作递增种子表,根据生成的记录数批量取得一批连续的序号
但这样做有个弊端,如果操作失败回滚,可能造成序号丢失一部分

两个进程本来就不是一个一个来的,还要求在无任何锁的前提下一个一个来,这不是为难数据库吗。

所以必须有两把锁,每个进程执行完后释放对方的锁。可以锁数据库的行,可以锁两个文件,可以用操作系统的锁等。

但是。。。。。。。。问题是不是一定要那么复杂?一般发现自己遇到一个稀奇古怪的问题的时候,可能需要换个角度看看自己是不是走入死胡同了。

如果想让大家帮你看看是不是走入死胡同了,最好发你原始的需求出来,而不是数据库锁什么的。

把请求扔到队列里

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏