关于数据库插入的问题

于吉小妖 2010-06-21 10:17:01
系统设计是这样的,在新插入一条数据的时候 先查找数据库中某一字段的数值,在此基础上+1,如:当插入的时候查到数据库某一字段的数值是333001,那么插入的这条数据此字段的数值就是333002,但是此会造成一个问题,当两个用户同时插入的时候 就可能会产生2条333002。如何解决这个问题。
备注:不能使用自增长。不使用随机数,随机数会导致数值无规律。
...全文
140 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
gohappy2008 2010-06-22
  • 打赏
  • 举报
回复
SQL Server为我们提供了UniqueIdentifier数据类型,并提供了一个生成函数NEWID( ),使用NEWID( )可以生成一个唯一的UniqueIdentifier。UniqueIdentifier在数据库中占用16个字节,出现重复的概率非常小,以至于可以认为是0。我们经常从注册表中看到类似{45F0EB02-0727-4F2E-AAB5-E8AEDEE0CEC5}的东西实际上就是一个UniqueIdentifier,Windows用它来做COM组件以及接口的标识,防止出现重复。在.NET里管UniqueIdentifier称之为GUID(Global Unique Identifier)。在C#中可以使用如下命令生成一个GUID:
Guid u = System.Guid.NewGuid();
一切为了你 2010-06-22
  • 打赏
  • 举报
回复
使用事务!
zhanggd614 2010-06-22
  • 打赏
  • 举报
回复
或者用存储过程这样
zhanggd614 2010-06-22
  • 打赏
  • 举报
回复
插入数据的时候先生成一个自加一的ID,再通过ID分配你要的流水账号
老Key 2010-06-22
  • 打赏
  • 举报
回复
在第二次插入的时候,在去读取一次,如果又了333002,就在自动加1,或者不让插入即可
如菜鸟 2010-06-22
  • 打赏
  • 举报
回复
我也想知道呢,期待解决
于吉小妖 2010-06-22
  • 打赏
  • 举报
回复
mark 继续
maxwellno1 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gxingmin 的回复:]
插入时加锁,用户甲插入时,用户乙不能操作
[/Quote]

正解
宇峰科技 2010-06-22
  • 打赏
  • 举报
回复
在插入时再获取新的ID,然后+1,最好用存储过程比较好
s8975565 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 s8975565 的回复:]
在数据库的字段上加上UNIQUE 如果执行失败 让他再加1
[/Quote]
给分啊 O(∩_∩)O~
s8975565 2010-06-22
  • 打赏
  • 举报
回复
在数据库的字段上加上UNIQUE 如果执行失败 让他再加1
-深白色- 2010-06-22
  • 打赏
  • 举报
回复
每次插入前lock住表,先检查id是否已经存在,如果存在,+1,如果还存在,继续+1直到不存在
插入完成以后释放锁。这个用存储过程很容易实现。
这样可确保唯一性,但是锁表的时候,如果插入动作很频繁,可能会导致性能上的一些损失。
yanele 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 guoluren_kang 的回复:]
在第二次插入的时候,在去读取一次,如果又了333002,就在自动加1,或者不让插入即可
[/Quote]
每次做插入动作前进行检查数据库里的最大编号(往往单据上之前会自动生成一个编号),
如果没有重复就直接插入数据,如果单据之前产生的号被占用,自动在数据库里最大编号上增加1,
当前最好增加的号能给用户以提示,并刷新界面,否则在原单据上进行修改就不好处理了!
zhuming8882000 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gxingmin 的回复:]
插入时加锁,用户甲插入时,用户乙不能操作
[/Quote]
具体给个例子行不?
如果用户很多,一个人占着页面的话,是不是其他用户都不可以插入数据了?
gxingmin 2010-06-21
  • 打赏
  • 举报
回复
插入时加锁,用户甲插入时,用户乙不能操作
于吉小妖 2010-06-21
  • 打赏
  • 举报
回复
顶下 接受更多的建议 谢ls
yanele 2010-06-21
  • 打赏
  • 举报
回复
路过,期待解决方法。
shixiujin 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tkascor 的回复:]
使用事务. 下一次插入, 要上一次完成之后才能插入~
[/Quote]
支持...
zhuming8882000 2010-06-21
  • 打赏
  • 举报
回复
我也遇到了楼主的问题,我用的方法是写了一个存储过程,只有在插入的时刻才会把新的数据插入到数据库中,也就是事先不会返回一个这样的值,这样的情况只有在两个用户同时插入一条数据时 可能会报错。自己仍然在想解决方案中,目前这种方法多个用户只要不在同一时刻(非常精确的一样)就不会出现问题。
2楼的请问下事务的怎么样实现?
tkscascor 2010-06-21
  • 打赏
  • 举报
回复
使用事务. 下一次插入, 要上一次完成之后才能插入~
加载更多回复(2)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧