大量数据并发的情况下 int主键 不设自增时取单号

1. 设置一张表,用于存放 对应的表名 和 对应的主键字段名

例:

create table T_Sys_CreateNo
(
   Id                   varchar(32) not null default '' comment '标识',
   curNo                int not null comment '表主键值',
   _TableName           varchar(50) not null default '' comment '表名',
   _FieldName           varchar(50) not null default '' comment '编号字段名',
   primary key (Id)
);


2.通过存储过程锁行,取对应的主键单号 (锁行保证多用户并发时主键ID值不会重复)

--1。获取单号    
 SELECT (curNo + 1) into currentNo FROM T_sys_createno WHERE _TableName = tableName AND _FieldName = fieldName for update;
    
-- 2.更新数据 
    UPDATE T_sys_createno SET curNo = currentNo WHERE _TableName = tableName AND _FieldName = fieldName;
View Code

优点:
1:ID值是可控的。用户可以从指定段开始分配ID值,这对于在分布式数据要求同数据同步时,非常方便,很好地解决了ID重复的问题。
2:在编写程序中,ID值是可见的,比如在再插入关联的记录时,相比使用数据库自增ID的情况下,这种方法不需要在插入一条数据库记录之后,再去得到自增ID值,然再再使用该ID的值来插入关联的记录。

posted @ 2016-03-31 16:17  飞行在午夜  阅读(209)  评论(0编辑  收藏  举报