首页 新闻 会员 周边 捐助

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

0
悬赏园豆:5 [已关闭问题] 关闭于 2017-03-31 22:15

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

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

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

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

xumenger的主页 xumenger | 初学一级 | 园豆:105
提问于:2016-09-14 16:42
< >
分享
所有回答(4)
0

自增字段有问题?

吴瑞祥 | 园豆:29449 (高人七级) | 2016-09-14 17:14

开了两个SQL Server Management studio,同时insert,最后能保证唯一,但并不是有序的

支持(0) 反对(0) xumenger | 园豆:105 (初学一级) | 2016-11-17 15:21

@xumenger: 你百度下Snowflake可以实现你的需求.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-17 15:36
0

mark

悦光阴 | 园豆:2251 (老鸟四级) | 2016-09-14 18:45
0

如果楼主只是为了ID 不重复 建议使用GUID 这样就保证了每个ID唯一性

如果是数字 1 2 3 递增的话 很难保证线程安全!

狂扁小朋友 | 园豆:10 (初学一级) | 2016-09-17 15:51

是的,并发情况下还要保证有序,的确无法保证性能!

支持(0) 反对(0) xumenger | 园豆:105 (初学一级) | 2016-11-17 15:22
0

整个字段一直自增?还是某一条数据一样的自增?

顾晓北 | 园豆:10893 (专家六级) | 2016-09-18 15:01

某个字段一直递增

 

想了一下,这个需求有点扯淡

支持(0) 反对(0) xumenger | 园豆:105 (初学一级) | 2016-10-12 17:52

@xumenger: 一直自增那就自增就行了呗。

支持(0) 反对(0) 顾晓北 | 园豆:10893 (专家六级) | 2016-10-12 20:56

@顾晓北: 主要要求多进程同时往一张表中进行insert

支持(0) 反对(0) xumenger | 园豆:105 (初学一级) | 2016-11-17 15:23

@xumenger: 既然sqlserver,自增就完了,sqlserver默认是开启事务的,跟多线程没毛关系。。。

除非你是想,一直自增,但是如果中间的数据删除了,后面的要更新回来,比如12345,删除了3,4变成3,5变成4,这样的话,就要用另外的方法了。

支持(0) 反对(0) 顾晓北 | 园豆:10893 (专家六级) | 2016-11-17 15:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册