1.当ABCD四个人同时访问数据库同一条记录时,假如A最早访问,如何做到A可以对该条记录进行所有操作,BCD只读,而不能进行任何其他操作?
2.有张“登陆登出日志”表,包括3个字段(用户,登陆时间,登出时间),在登陆系统时记录登陆时间,登出时记录等登出时间,假如异常退出,比如死机、断电等,这时该如何处理?
3.当一条记录Update时,如何将该条记录所有被修改的字段保存到一张表‘记录日志’(没修改的不用)?
2.有张“登陆登出日志”表,包括3个字段(用户,登陆时间,登出时间),在登陆系统时记录登陆时间,登出时记录等登出时间,假如异常退出,比如死机、断电等,这时该如何处理?
3.当一条记录Update时,如何将该条记录所有被修改的字段保存到一张表‘记录日志’(没修改的不用)?
2,采用定时更新退出时间
3,建一个结构一样的bak表,但要比原表多一个ID,更新之前,把数据复制过去就行了 可以考虑触发器
2.假如我进行了一个操作,但定时器时间没到,异常退出,则无法更新。
3.注:是把每个修改了的字段保存到bak表,而非整条记录。
2,心跳机制,定时获取客户端状态,关键部分用。
3,用触发器。
http://blog.csdn.net/jinjazz/article/details/4520802
这个是数据库应该考虑的问题,而不你来考虑的,1. 可以参考一下,数据库的隔离级别,不过默认的数据库隔离级别就是这样的,因此你不需要做任何的处理就可以实现,也不用加什么事务
2. 不明白你说什么,客户没登出就死机,还是服务器死机,客户端死机的话,可以在服务端这样处理,登陆时就写登陆日志,退出之后再写登出时间,如果客户机死机,可以设定一个超时时间,超时时间过了之后,把没有动作的客户机全部登出,并记录该客户机登出时间,如果是服务端死机,那就不管了,有什么好弄的。
3. Update数据的同时,再写一下日志表。
undead4444
你们貌似说的对 再看看 如果别人说的没你们的合理就给你们
事务是确保数据的原子性和一致性
对于第3个问题,一般有2种方式完成
第一种数据库方式:数据库做update触发,然后更新日志(其实sql的日志本身也有这功能,假设你很清楚sql日志的格式,完全也可以直接分析sql日志)第二种方式,由自己的代码完成。自己的对象实现INotifyProptyChanged,IEditableObject 两个事件。由这两个接口共同完整,属性修改判定(IEditableObject会把原始值保存,INotifyProptyChanged则可以在修改属性值的时候和原始值比较一下,如果的确是修改了则向上触发通知)这样你就可以在EndEidt的时候,获取到整个对象都修改了那些属性值的消息,然后保存下来