我想做个多用户系统,数据库用SQL2000,前端用VB开发,用存储过程,但不知该如何才能保证每个用户的数据的一致性?如:我有二个表,一个表是订单表,一个是收货表,首先在订单表
我想做个多用户系统,数据库用SQL2000,前端用VB开发,用存储过程,但不知该如何才能保证每个用户的数据的一致性?如:我有二个表,一个表是订单表,一个是收货表,首先在订单表中输入订单资料,然后在收货 我想做个多用户系统,数据库用SQL2000,前端用VB开发,用存储过程,但不知该如何才能保证每个用户的数据的一致性?如:我有二个表,一个表是订单表,一个是收货表,首先在订单表中输入订单资料,然后在收货表中输入对应于订单表中的收货资料,并且需把相对应的收货资料的数量总和写到订单表中去,并且收货总数量不能大于订单数量,那么在多人输入收货资料时,我该如何保证数据的一致性呢?请大家帮忙给点思路,谢谢大家!
6 个解决方案
#1
保存收货资料的存储过程: 开启事务 保存收货资料表 更新订单表中的收货数量 检查收货数量是否大于订单数量 如大于 回滚事务 返回错误信息 否则 结束事务
#2
同意楼上 使用存储过程+事物处理 并且,建立日志文件,LOG数据库
#3
对,楼上说的对,用存储过程+事务就可以解决~ 至于如何去判断,只有等你到做程序做不下去的时候在拿出代码来一起研究 统一用户一致性,最关键是的锁和事务~ 锁是锁住数据集,当某人对数据进行操作的时候,别人不能在进行操作 事务也是一样~在没有结束提交之前别人无法提交~ 通过这两样的其中一样,就可以完成数据的一致性~
#4
楼上的朋友,游标及锁定的选择我有点搞不清楚,能讲的详细点吗?谢谢!
#5
学习
#6
实际上Select是不锁表的,只有Update,Insert,delete是锁表的 一个使用事物的实例(存储过程) CREATEPROCEDURESP_CLUB_GOMYCLUB @user_numberint, @user_idvarchar(20) AS BEGIN --设置存储过程的脱离时间 SETLOCK_TIMEOUT1800 BEGINTRANSACTION SELECTclub_code,club_nameFROMclub_common_memberWITH(NOLOCK)WHEREclub_mem_n o=@user_numberandclub_mem_id=@user_id UNION SELECTclub_code,club_nameFROMclub_game_memberWITH(NOLOCK)WHEREclub_mem_no =@user_numberandclub_mem_id=@user_id UNION SELECTclub_code,club_nameFROMclub_favor_memberWITH(NOLOCK)WHEREclub_mem_no =@user_numberandclub_mem_id=@user_id IF@@ERROR0OR@@ROWCOUNT=0 BEGIN ROLLBACKTRANSACTION END ELSE BEGIN COMMITTRANSACTION END END GO