[推荐] 升两颗星,发现有好多东西还是不知道,月末了准备不在逛论坛了,散个分顺便在此分享一个生成流水号(订单号)的思路 300筱筱澄]

发布时间:2016-12-8 19:54:30 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"[推荐] 升两颗星,发现有好多东西还是不知道,月末了准备不在逛论坛了,散个分顺便在此分享一个生成流水号(订单号)的思路 300筱筱澄]",主要涉及到[推荐] 升两颗星,发现有好多东西还是不知道,月末了准备不在逛论坛了,散个分顺便在此分享一个生成流水号(订单号)的思路 300筱筱澄]方面的内容,对于[推荐] 升两颗星,发现有好多东西还是不知道,月末了准备不在逛论坛了,散个分顺便在此分享一个生成流水号(订单号)的思路 300筱筱澄]感兴趣的同学可以参考一下。

本帖最后由 筱筱澄 于 2012-08-30 12:39:48 编辑 据我知道的比较常用的两种生成流水号的方法 1.随机数,配合一张独立的表已成生成10W 100W的重复的编号 缺点:可能因为重复而导致多次重复生成编号,编号表的数据也会越来越大,导致性能越来越低 2.查询出表中的最大 id + 1 缺点:一般人没有考虑并发调用的问题,容易导致产生重复编号 如果强制加锁控制并发,则由于强制加锁是阻塞正常的 SELECT,会导致与生成编号 无关的 SELECT 操作也被Block, 从而导致大范围的业务影响 另外,随着数据的增长,这种查询本身也会导致性能越来越低 推荐方法:使用单独的表来做生成编号的操作 -- 编号表 CREATE TABLE dbo.tb_id(     name varchar(50)    -- 业务名称,比如是用于某个表的id 生成的表名         PRIMARY KEY,     id int,     -- 当前编号     seed int    -- 编号增长值 ); GO 使用之前初始化编号表,填入业务以及初始的编号 如:2012081900001 和每次增长的增长值,通常为1 当要取号的时候,取编号表的对应业务编号,并进行update操作来取号 这样编号表中可能只有几行到几十行的数据,数据量很小,取号效率非常高,同时用update 避免了并发去重号的问题 以下附上取号的操作代码供大家参考 -- 取下一个编号的公共存储过程 CREATE PROC dbo.p_GetID     @name varchar(50),     @id int OUTPUT AS  SET NOCOUNT ON; UPDATE dbo.tb_id SET     @id = id + seed,     id = @id WHERE name = @name ; GO -- 使用之前,先初始化一条数据 INSERT dbo.tb(     name, id, seed ) VALUES     ('test', 0, 1) ; -- 需要新的id 时,调用公用的存储过程进行获取 DECLARE     @id int ; EXEC dbo.p_GetID     @name = N'test',     @id = @id OUTPUT ; SELECT     当前编号 = @id,     需要格式化的话 = 'XS' + RIGHT(1000000 + id, 6) ; 接下来准备总接一下使用 OPENROWSET导入Execl数据的时候出现的一些常见错误的处理,不晓得大家有兴趣没 下面是CSDN的广告。

升2星后退休!!!

引用楼主  的回复:接下来准备总接一下使用 OPENROWSET导入Execl数据的时候出现的一些常见错误的处理,不晓得大家有兴趣没 有啊,期待中。。

恭喜升星星啊... 

恭喜升双星!

恭贺升级,前来接分

恭喜美女升双星  我还差一点才升一星,打算升星后就不天天逛论坛了

恭喜升级

恭喜!!恭喜!!

恭喜升级

恭喜美女 常回家看看

头像很赞啊

引用 3 楼  的回复:引用楼主  的回复: 接下来准备总接一下使用 OPENROWSET导入Execl数据的时候出现的一些常见错误的处理,不晓得大家有兴趣没 有啊,期待中。。 谢谢支持

楼主 终于觉悟了。还好我觉悟的比你早。俺现在只 JF。

接分  

楼主 生的好快

恭喜恭喜!

嫂子要隐退了? 分这东西还是要像我细水长流的涨才好。。。。。。涨太快容易厌。

接分了

UPDATE dbo.tb_id SET     @id = id + seed,     id = @id WHERE name = @name 不用output了? 这样会不会还是 非原子 的?定位与更新之间,被别人先更新过了?

引用 20 楼  的回复:UPDATE dbo.tb_id SET     @id = id + seed,     id = @id WHERE name = @name 不用output了? 这样会不会还是 非原子 的?定位与更新之间,被别人先更新过了? 在同一个update 语句里面 这个跟使用output效果是一样的,update 会自动锁表的。

接下来准备总接一下使用 OPENROWSET导入Execl数据的时候出现的一些常见错误的处理,不晓得大家有兴趣没

恭喜恭喜!

恭喜恭喜哈~

接分来的

月末了,来接点分。

送分我也要啊!

我也要分啊

接分来的

前来祝贺  顺便接分  呵呵

接分来的谢谢。

引用 21 楼  的回复:引用 20 楼 的回复: UPDATE dbo.tb_id SET @id = id + seed, id = @id WHERE name = @name 不用output了? 这样会不会还是 非原子 的?定位与更新之间,被别人先更新过了? 在同一个update 语句里面 这个跟使用output效果是一样的,update 会自动锁表的。 锁键值。表只是意向排它,过程最好加上更新锁与事务

接分,学习,恭喜楼主早日升星

恭喜嫂子升双星,对你的总结很感兴趣。另外你决定隐退么我都习惯了在SQL版块看到你的图像了

恭喜恭喜,你赚分的速度好快哦!我也加油赚!

引用 18 楼  的回复:嫂子要隐退了? 分这东西还是要像我细水长流的涨才好。。。。。。涨太快容易厌。 还有很多都不会啊,去进修。

呵呵,不错,才女,一个啊,

恭喜恭喜~

进修也要抽点时间回来看看哦,我们菜鸟那得很多东西要向你们学习。

引用 36 楼  的回复:引用 18 楼  的回复: 嫂子要隐退了? 分这东西还是要像我细水长流的涨才好。。。。。。涨太快容易厌。 还有很多都不会啊,去进修。 我也在修炼中,共同努力吧。

[url=http://news.cyzone.cn/news/2012/08/30/231864.html][\url]

不懂  标示看不懂。

月末了 接点分 

月末了

偶也想升。

jfjf

接分接分

每天回帖即可获得10分可用分!

不错不错~~~

引用 32 楼  的回复:引用 21 楼  的回复: 引用 20 楼 的回复: UPDATE dbo.tb_id SET @id = id + seed, id = @id WHERE name = @name 不用output了? 这样会不会还是 非原子 的?定位与更新之间,被别人先更新过了? 在同一个update 语句里面 这个跟使用output效果是一样的,update 会自动锁表的…… 嗯 最好加锁,写到事务里面是必须的。

恭喜恭喜!!

这种方法也存在并发问题,每次只能一个事务调用

引用 54 楼  的回复:这种方法也存在并发问题,每次只能一个事务调用 请指教高招

试过每次从n条记录里随机取1条来修改 类似:update tbxxx newid=newid+1 where row_number()=rand()*总记录数 更新时不互相影响了,但是生成row_number()时也会互相影响吧?

然后去哪了?

接分 学习

恭喜恭喜

楼主先教教我怎么学数据库啊

I'm just a joint points。

恭喜~~~~

思路不错,学习了,记得给分!呵呵

引用 57 楼  的回复:试过每次从n条记录里随机取1条来修改 类似:update tbxxx newid=newid+1 where row_number()=rand()*总记录数 更新时不互相影响了,但是生成row_number()时也会互相影响吧? 你确定更新不互相影响? 

引用 61 楼  的回复:楼主先教教我怎么学数据库啊 微博见到一个数据库大牛的图像和你的一样,一开始还以为他就是你呢

引用 65 楼  的回复:引用 57 楼 的回复: 试过每次从n条记录里随机取1条来修改 类似:update tbxxx newid=newid+1 where row_number()=rand()*总记录数 更新时不互相影响了,但是生成row_number()时也会互相影响吧? 你确定更新不互相影响? 因为每次的随机数不一样,即各个连接更新不同的记录(暂时不考虑随机数正好相同)

引用 65 楼  的回复:引用 57 楼  的回复: 试过每次从n条记录里随机取1条来修改 类似:update tbxxx newid=newid+1 where row_number()=rand()*总记录数 更新时不互相影响了,但是生成row_number()时也会互相影响吧? 你确定更新不互相影响? 小弟菜鸟级别,就会点select * from

引用 66 楼  的回复:引用 61 楼  的回复: 楼主先教教我怎么学数据库啊 微博见到一个数据库大牛的图像和你的一样,一开始还以为他就是你呢 绝对不是一个级别的人物,这个我可以肯定。你教教我噻

初到贵宝地,什么时候才能拿到C的第一分呢,来了论坛四天,目前仍然零蛋

说好的散分呢

围观大牛。

恭贺升级,前来接分 +1

里面有个牛人有个好办法,可以试试,不错。 http://topic.csdn.net/u/20110522/00/a7305952-bf25-43e1-a518-db16a29b8d35.html

学习学习

哎 大周末的还是逛论坛 节分喽 哈哈

恭喜恭喜

顶个先

哎呀,可喜欢你了

顶~~~~~~~~~·

姐....你怎么可以不逛论坛了呢,我可是你的粉丝呀

姐,你什么时候还来论坛?csdn哟~~~~

恭喜恭喜!

楼主 我来啦

该回复于2012-09-13 10:58:06被版主删除

退的太早了吧,才两心,我准备搞个章什么的再退役!

基本就是这么实现的 不过还有可以改进的地方

比如说 2012081900001 这个单据号 客户可能是想 用 日期+当日流水号 来生成单据的 所以需要一个前缀的字段 比如说某个客户需要用 日期+部门id+流水号 来生成单据 或者 日期+业务远+流水号 企业里边一般都是按照中需求来用的

不会是功成身退了吧~~~

每天回帖即可获得10分可用分!

已经啥都不会的路过

mark 一下先

嫂子好

才女哦,嘿嘿~http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/0.gif

才女哦~

翻页了哦

翻页了哦

翻页了哦

用序列或者时间戳

上一篇:SQL Server 简单模式下,误删除堆表记录进行数据恢复(技术贴) 100zc10151]
下一篇:11g,如何创建临时目录,新人求助! 40me124529229]

相关文章

相关评论