mssql 2000 下类似论坛的楼层处理插入SQL语句
来源:互联网 发布:php软件开发要学什么 编辑:程序博客网 时间:2024/06/07 21:29
其实去年做一个小型论坛的时候接触过这个方面的问题,当时也提出了一个解决方案,但由于没有大量的并发测试,所以不知道效果到底如何。
使用这个应该没有问题了,等过段时间上线了再测试下。如果研究过这个发面的高手路过,求指教求学习
其实主要的问题就是集中在那个楼层计算上面。在前台页面显示有如下两种情况:
- 第几个回复就是第几楼。在数据库不保存楼层数,直接在前台输出的时候计算显示楼层。因此在有删除回复的情况下,楼层数是可变的,这样不利于楼层回复。
- 按照回复的顺序计算楼层。在数据库保存楼层数,即在插入回复时就计算出楼层。这样即使有删除的回复,每个回复的楼层数是不会变的。
所以尽量是要使用第二种情况。
去年的时候提出的解决方案如下:
其中主题表为tbl_post,回复表为tbl_reply
declare @floor int;select @floor = (select count(*) from tbl_reply where postId = $postId) + 1;insert into tbl_reply values($postId,$content,$userid,date,@floor,1,0);Go
但这样其实明眼一看很容易造成冲突,因为没有给tbl_replay加修改锁,很有可能几个回复会得到同一楼层
于是这次又涉及到这个内容后,查询了一些资料,改进如下:
其中主题表为tbl_post,回复表为tbl_reply
BEGIN TRANSACTIONDECLARE @errorSun INT SET @errorSun=0select * from zb_reply with (UPDLOCK); --给zb_reply表加修改锁declare @floor int;select @floor = (select count(*) from zb_reply where pid = $pid) + 1; --计算楼层insert into zb_reply values($pid,$content,$userid,date,@floor,1);SET @errorSun=@errorSun+@@ERRORupdate zb_post set reply = reply + 1 where pid = ".$pid."; --给主题表添加回复数SET @errorSun=@errorSun+@@ERROR --错误处理IF @errorSun<>0 BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTIONEND
使用这个应该没有问题了,等过段时间上线了再测试下。如果研究过这个发面的高手路过,求指教求学习
- mssql 2000 下类似论坛的楼层处理插入SQL语句
- MSSQL生成表数据SQL插入语句的存储过程
- mssql 2000 下批量 附加/分离 数据库(sql语句)
- 对于MSSQL数据库被插入的木马可用SQL语句批量删除的方法。
- 类似Mybatis的sql语句
- MSSQL中获得SQL语句的执行时间。
- 获取MSSQL数据字典的SQL语句
- 测试mssql中sql语句的执行时间
- SQL游标 循环处理插入、修改语句
- 处理数据批量生成sql插入语句
- 一个类似行列互换的sql语句
- SQL的插入语句insert
- Mssql,Access的sql经典SQL语句大全
- 类似java中swith case语句的sql语句
- MSSQL 数据库修复,语句参考及单用户模式的处理
- 查询MSSQL数据库中表结构的详细信息的SQL语句
- 高效率的Access\MSSQL分页的SQL语句
- 行变列SQL语句(MSSQL)
- 用editplus编写好看的shell脚本
- 开源.NET下的XML数据库介绍及入门
- ubuntu10.04下 rails -v 提示rails未安装
- Yum运用详解(二)——yum命令
- 博客开篇
- mssql 2000 下类似论坛的楼层处理插入SQL语句
- 大神写的算法与数据结构
- try catch ,trow,throws的区别和联系
- Java调用xml文件
- PHP随机数生成与使用解析
- usb学习笔记4
- Ubuntu分区
- Hibernate的集合映射
- IOS的app程序中的文件目录的功能和使用详细说明