并行访问数据库同一记录

dvdhan 2012-06-25 10:30:21
1.当ABCD四个人同时访问数据库同一条记录时,假如A最早访问,如何做到A可以对该条记录进行所有操作,BCD只读,而不能进行任何其他操作?
2.有张“登陆登出日志”表,包括3个字段(用户,登陆时间,登出时间),在登陆系统时记录登陆时间,登出时记录等登出时间,假如异常退出,比如死机、断电等,这时该如何处理?
3.当一条记录Update时,如何将该条记录所有被修改的字段保存到一张表‘记录日志’(没修改的不用)?
...全文
173 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dvdhan 2012-06-29
  • 打赏
  • 举报
回复
如何在程序中调用水晶报表
wanghui0380 2012-06-26
  • 打赏
  • 举报
回复
5楼已经回答的很完整了

我在补充一下第3个问题
对于第3个问题,一般有2种方式完成
第一种数据库方式:数据库做update触发,然后更新日志(其实sql的日志本身也有这功能,假设你很清楚sql日志的格式,完全也可以直接分析sql日志)

第二种方式,由自己的代码完成。自己的对象实现INotifyProptyChanged,IEditableObject 两个事件。由这两个接口共同完整,属性修改判定(IEditableObject会把原始值保存,INotifyProptyChanged则可以在修改属性值的时候和原始值比较一下,如果的确是修改了则向上触发通知)这样你就可以在EndEidt的时候,获取到整个对象都修改了那些属性值的消息,然后保存下来
烈火蜓蜻 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
1.当ABCD四个人同时访问数据库同一条记录时,假如A最早访问,如何做到A可以对该条记录进行所有操作,BCD只读,而不能进行任何其他操作?
2.有张“登陆登出日志”表,包括3个字段(用户,登陆时间,登出时间),在登陆系统时记录登陆时间,登出时记录等登出时间,假如异常退出,比如死机、断电等,这时该如何处理?
3.当一条记录Update时,如何将该条记录所有被修改的字段保存到一张表‘记录日志’(没……
[/Quote]

这个是数据库应该考虑的问题,而不你来考虑的,

1. 可以参考一下,数据库的隔离级别,不过默认的数据库隔离级别就是这样的,因此你不需要做任何的处理就可以实现,也不用加什么事务
2. 不明白你说什么,客户没登出就死机,还是服务器死机,客户端死机的话,可以在服务端这样处理,登陆时就写登陆日志,退出之后再写登出时间,如果客户机死机,可以设定一个超时时间,超时时间过了之后,把没有动作的客户机全部登出,并记录该客户机登出时间,如果是服务端死机,那就不管了,有什么好弄的。
3. Update数据的同时,再写一下日志表。
undead4444 2012-06-25
  • 打赏
  • 举报
回复
断开连接的话可以参考这个文章,独占查询模拟,用update当select,后面的会话根据是否有tag标记来判断是否可以update
http://blog.csdn.net/jinjazz/article/details/4520802
undead4444 2012-06-25
  • 打赏
  • 举报
回复
1,SELECT * FROM table WITH (HOLDLOCK) 会话A持有共享锁,BCD可以select不能update,当A释放后BCD才可以update。
2,心跳机制,定时获取客户端状态,关键部分用。
3,用触发器。
dvdhan 2012-06-25
  • 打赏
  • 举报
回复
1.DataSet数据集,断开连接的操作,事务是肯定不行了。
2.假如我进行了一个操作,但定时器时间没到,异常退出,则无法更新。
3.注:是把每个修改了的字段保存到bak表,而非整条记录。
WM_JAWIN 2012-06-25
  • 打赏
  • 举报
回复
1,启用事务
2,采用定时更新退出时间
3,建一个结构一样的bak表,但要比原表多一个ID,更新之前,把数据复制过去就行了 可以考虑触发器
叶帅 2012-06-25
  • 打赏
  • 举报
回复
1、启动事务。
2、在需要更新的那张表加一个排它锁的字段。思路大概就是这样子。
guoyanqi1983 2012-06-25
  • 打赏
  • 举报
回复
SQL中经常被人忽略的:锁!排他锁可以解决楼主所讲的问题1
事务是确保数据的原子性和一致性
dvdhan 2012-06-25
  • 打赏
  • 举报
回复
Linux7985
undead4444
你们貌似说的对 再看看 如果别人说的没你们的合理就给你们

110,526

社区成员

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

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

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