社区
数据库相关
帖子详情
请教各位大侠,在C/S多用户中,你们是如何保证同一数据库同一个表的数据的完整性和一致性的呢?
sunboy_hb
2002-12-12 04:27:36
当多个用户连接到同一数据库使用同一个表时,你们是如何实现数据互锁来保证表数据的一致性和完整性的呢?
...全文
90
22
打赏
收藏
请教各位大侠,在C/S多用户中,你们是如何保证同一数据库同一个表的数据的完整性和一致性的呢?
当多个用户连接到同一数据库使用同一个表时,你们是如何实现数据互锁来保证表数据的一致性和完整性的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chengjian
2003-03-04
打赏
举报
回复
不用想办法。
SQL SERCER 都为你做好了!
你要做的只是保证一个事务有完整性,一个事务尽可能早的提交(commit)或回滚(rollback ),
避免死锁。
一条记录的修改时,其它人是不能修改的,这由SQL SERVER 来做。注意:修改是指commit.而不是你的客户端程序的修改。
数据的一致性,由SQL SERVER的外键来保证,不用自己来做。
所有的关系数据库都很好的保证了这一点的。
mui7788
2003-03-04
打赏
举报
回复
用datawindow的update属性能解决数据一致性问题
hhwhwh
2003-02-27
打赏
举报
回复
在记录上加上状态,处理时加上判断
sunboy_hb
2003-02-22
打赏
举报
回复
有没有更好的专业的方案呢?
sunboy_hb
2003-01-25
打赏
举报
回复
举个例子来说吧,由销售人员起草了一份订单,经理正在查阅审核,这时销售人员又想修改该订单,销售人员修改后并保存,而此时经理还未审核完毕。等审核完后,经理再提交,就会出错或出现数据的不一致。
我想当经理在审核过程中,不允许销售再修改。
我想这样实现:在每条记录中加上一个LOCKED字段,int型,初始值为0;在数据库中加一个存储过程,它的功能为将LOCKED加1,然后再读locked的值,如果为1,则认为是第一个使用该用户,return true;否则,return false;
在每提取一条记录时,先执行上面的存储过程,如果返回TRUE,则可以修改,否则对该条记录“只读”。
shahand
2003-01-25
打赏
举报
回复
是不是你已经问过了一个
偶觉得可行,即通过向表中改写数据来控制用户操作,如果改写数据比较频繁的话
sunboy_hb
2003-01-25
打赏
举报
回复
我只是要求用户能同时读不能同时写,我也看了DATAWINDOW的UPDATE的SQL代码。现在,我想仿操作系统的机制,在每个表中加入一个LOCK列,来加上“写”锁标志。因为只有开发者才能确定何时是“WRITE”OR "READ ". 不知行否?
另外,请问,我怎么能获得系统提供的行锁状态,即我如何得到某一表的某一条记录是否已经被用户“占用”?
Chrisma
2002-12-31
打赏
举报
回复
其实很简单,应用事物机制。同时进行的事物只有一个能commit成功。关于行锁的讨论不是完全正确的,还有表锁。要看锁的级别了,缺省是行锁。
newpb80
2002-12-19
打赏
举报
回复
因为sqlserver 为行锁,用sql语句,只要每次只对一行操作,只要不提交,就锁住该行,另一个用户无法对该列执行写操作。用datawindow,无法控制,只能一个成功,一个不成功。
sunboy_hb
2002-12-19
打赏
举报
回复
styker,谢谢。
正如你所说,我就是要求用户能同时读不能同时写,我也看了DATAWINDOW的UPDATE的SQL代码。现在,我想仿操作系统的机制,在每个表中加入一个LOCK列,来加上“写”锁标志。因为只有开发者才能确定何时是“WRITE”OR "READ". 不知行否?
另外,请问,我怎么能获得系统提供的行锁状态,即我如何得到某一表的某一条记录是否已经被用户“占用”?
styker
2002-12-17
打赏
举报
回复
你的意思是要求不同用户能同时读写不同的咧?
只能通过where clause来精确控制,但有一点contraint key 或primary key 不允许被同时更改。
你所说的问题可能不一定是行集锁的问题,在sqlserver7.0中,系统已经加入了行集锁的控制。如果不确定,可以用sp_config去查一下。
这种情况,你应该注意将datawindow的update where clause列尽量的精简。
如果你注意datawindow的update操作生成的sql代码,你就会注意到
update 表 set 更新 where 条件
这里条件用来定位数据库中的记录。如果数据库中相关的列值发生变化,无法定位数据,系统就会报入你上面所属的错误信息。
pandge
2002-12-16
打赏
举报
回复
gz
sunboy_hb
2002-12-14
打赏
举报
回复
也就是说如果已经有用户正在修改记录N,则其它用户只读该记录,但是可以修改同一表的其它记录,如何实现呢?
sunboy_hb
2002-12-14
打赏
举报
回复
我是想问如何保证同一表同一记录的完整性和一致性问题,例如:
如果用户1在提取表A数据后修改了数据记录N,但是还没有保存(没有UPDATE,或INSERT)之前,这时用户2也提取了表A的数据并且也修改了数据记录N,然后用户2保存了数据退出。然后,用户1如果保存数据的话,系统就会提示“原数据已经被修改,无法提交修改到数据库”。如何避免这种情况呢?也就是如何实现数据行级别的锁定呢?必须加上一个记录锁状态的数据段吗?不能直接利用MS SQL SERVERR提供的功能吗?
flyhot
2002-12-14
打赏
举报
回复
gz
sunboy_hb
2002-12-13
打赏
举报
回复
我们如何能在程序中检测到现在要修改的表正在被其它用户使用,来限制它不能被修改或删除,用时间戳吗?
按规则,当一个表正在用户使用时,就不允许其它用户对它操作了吗?
esunny
2002-12-13
打赏
举报
回复
XXX
有时要用到表锁,有时用到行锁。
qqf
2002-12-13
打赏
举报
回复
可以呀,客户端只是把服务器的数据提取出来而以,经过修改然后保存的时候才和服务器关联
同意 dongquestion(书山有路勤为径)
realfool
2002-12-12
打赏
举报
回复
ms sql server 7.0自动加数据行锁,我更多是动脑筋解决死锁问题而不是相反。
dongquestion
2002-12-12
打赏
举报
回复
你可在建datawindow时在update属性中选中key and updateable column,以后如果在你修改数据并保存时有别的人已经修改过表,则系统会给你提示
加载更多回复(2)
C# For Unity系列之入门篇
你想当“李逍遥”式的“
大侠
”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!...
Java springboot篮球竞赛平台设计与实现—看这篇就够了
随着信息化时代的到来及贵州村BA的火爆,篮球村BA模式必将在全国推广。目前管理系统都趋向于智能...本篮球竞赛预约平台以springboot作为框架,b/s模式以及MySql作为后台运行的
数据
库
,同时使用Tomcat用为系统的服务器。
zhihu spark集群,书籍,论文
spark集群
中
的节点可以只处理自身独立
数据
库
里的
数据
,然后汇总吗? 修改 ...我将spark搭建在两台机器上,其
中
一台既是...目前我的代码如下,但是最终只统计了master里的
数据
,另一个worker没有统计上。 ...
WEB开发文档2 总结
http://blog.donews.com/lvjiyong/archive/2006/06/29/931071.aspx怎样将后台生成的在内存
中
的图象显示到客户端Microsoft IE WebControls下载地址如何在DATAGRID
中
使用JAVASCRIPT脚本控制DataGrid
中
连接到下一页显示...
C++面试题
1.构造一个类MySingleton,使该类只能存在一个实例. 思路: 将构造函数写为private的,然后通过一个成员静态函数来调用构造函数即可:) 例: #include "iostream.h" class MySingleton { private: static ...
数据库相关
752
社区成员
12,763
社区内容
发帖
与我相关
我的任务
数据库相关
PowerBuilder 数据库相关
复制链接
扫一扫
分享
社区描述
PowerBuilder 数据库相关
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章