如何做数据库操作的排他操作?(个人小结)
2005-10-10 13:46
531 查看
在现在的很多系统开发中,都会有或多或少的数据库操作。对于单机的数据库系统,对数据的并发存取基本上不存在会产生冲突的问题;但在当今的网络环境中,单机系统几乎已经不复存在。在网络数据库环境中,时刻都会有并发的存取操作,对于一个完善的数据库系统来说,它们本身就提供了数据完整性以及并发操作的设计,但对于一个非纯粹的数据库管理系统来说,很多时候是通过程序来控制数据的存取权限与存取控制(更有效和直接),而数据库系统在这时只是充当一个数据容器。这时,就需要我们对数据存取过程中的各种处理进行比较详细的设计。排他操作是其中非常重要的一个环节。只有很好地处理好数据的排他才能保证数据的完整性与有效性,避免大量冗余数据的出现。
在实际开发中,排他可以通过多种方式来实现。
一、在数据库设计时增加数据记录的更新时间字段。这种方式是通过在进行更新操作前对更新时间进行比较,如果发现更新时间已经发生改变,则取消该操作。由于需要进行比较操作,在取得需要更新的数据时就需要同时取得该条记录的更新时间;而在更新操作前再取得一次更新时间(注意:在有些数据库中需要更新数据库连接才能取得最新数据)。由于这种方式在操作时并不对记录进行锁定,所以如果对数据处理的时间较长,就有可能产生编辑的数据已经被其他用户更新,而不能再次更新到数据库的情况发生,造成数据更新的失败次数增加。所以,这种方式的操作在实际使用中应针对于比较小型的系统。
二、在数据库设计时增加排他字段。这种方式是通过在更新记录时对记录进行锁定来保证数据的正常更新。在这种方式下,可以保证数据更新在编辑时就能确定。在需要更新记录时,先根据排他字段的值来确定是否可以进行更新操作,如果记录没有被其他用户锁定,则锁定这条记录,直到用户提交或取消此条记录的更新请求。在这种情况下,如果某个用户对某(几)条数据的编辑操作持续时间太长,会影响其他用户的使用。所以,一般会限制对记录的操作时间来防止对某些记录的“死锁”。
当然,对于某些已经通过权限控制只有单个用户对某些数据进行操作的情况,不在此讨论范围之列。
以上仅是个人一点总结,仅供参考。
在实际开发中,排他可以通过多种方式来实现。
一、在数据库设计时增加数据记录的更新时间字段。这种方式是通过在进行更新操作前对更新时间进行比较,如果发现更新时间已经发生改变,则取消该操作。由于需要进行比较操作,在取得需要更新的数据时就需要同时取得该条记录的更新时间;而在更新操作前再取得一次更新时间(注意:在有些数据库中需要更新数据库连接才能取得最新数据)。由于这种方式在操作时并不对记录进行锁定,所以如果对数据处理的时间较长,就有可能产生编辑的数据已经被其他用户更新,而不能再次更新到数据库的情况发生,造成数据更新的失败次数增加。所以,这种方式的操作在实际使用中应针对于比较小型的系统。
二、在数据库设计时增加排他字段。这种方式是通过在更新记录时对记录进行锁定来保证数据的正常更新。在这种方式下,可以保证数据更新在编辑时就能确定。在需要更新记录时,先根据排他字段的值来确定是否可以进行更新操作,如果记录没有被其他用户锁定,则锁定这条记录,直到用户提交或取消此条记录的更新请求。在这种情况下,如果某个用户对某(几)条数据的编辑操作持续时间太长,会影响其他用户的使用。所以,一般会限制对记录的操作时间来防止对某些记录的“死锁”。
当然,对于某些已经通过权限控制只有单个用户对某些数据进行操作的情况,不在此讨论范围之列。
以上仅是个人一点总结,仅供参考。
相关文章推荐
- 如何做数据库操作的排他操作?(个人小结) .
- 数据库开发个人总结(ADO.NET小结)
- 如何将Android数据库操作通用化(一)
- onethink如何在新增时一条数据的时候运行一个函数或进行某数据库的操作
- 数据库开发个人总结(ADO.NET小结)
- C++操作Redis数据库 如何安装hiredis
- ci框架对数据库的操作小结
- 数据库的基本操作小结
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结。
- 如何实现每天定时对数据库的操作
- VC操作INI文件 ,INI文件操作总结,如何操作INI文件,INI文件使用方法小结
- mysql 命令行创建数据库操作个人学习
- delphi 对 access 数据库的操作如何完成?
- 1.如何优化操作大数据量数据库(建立索引)
- 如何用Tprinter设计BCB操作数据库程序中的报表
- 嵌入式线程函数中如何对CEdit控件操作小结
- mybatis自带常用操作数据库方法详解以及如何搭建简单的mybatis环境
- 如何实现每天定时对数据库的操作
- 数据库开发个人总结(ADO.NET小结)
- 教你如何操作VS2010中SQL2008并且实现连接数据库