SQL Server多进程多线程并发情况下如何保证insert到一张表中的某个字段顺序递增
两个进程,每个进程中有一个线程往SQL Server的表A中insert记录,但要求整张表A中的字段a是顺序递增的
也就是1、2、3、4、5、6……
有什么办法能在尽可能少用锁,尽可能不过分影响性能的情况下解决这个需求?
用了identity关键字建表,在单线程的情况下OK,但在并发情况下并不能保证严格顺序递增!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你是想让每个线程生成的序号连续递增吗?
你可以试试自己制作递增种子表,根据生成的记录数批量取得一批连续的序号
但这样做有个弊端,如果操作失败回滚,可能造成序号丢失一部分
两个进程本来就不是一个一个来的,还要求在无任何锁的前提下一个一个来,这不是为难数据库吗。
所以必须有两把锁,每个进程执行完后释放对方的锁。可以锁数据库的行,可以锁两个文件,可以用操作系统的锁等。
但是。。。。。。。。问题是不是一定要那么复杂?一般发现自己遇到一个稀奇古怪的问题的时候,可能需要换个角度看看自己是不是走入死胡同了。
如果想让大家帮你看看是不是走入死胡同了,最好发你原始的需求出来,而不是数据库锁什么的。
把请求扔到队列里