摘要: sql server锁机制[导读: 各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别。SQL Server更强调由系统来管理锁。在用户有SQL请求时,系统分析请求,自动在满足锁定条件和系统性能之间为数据库加上适当的锁,同时系统在运行期间常常自动进行优化处理,实行动态加锁。对于一般的用户而言,通过系统的自动锁定管理机制基本可以满足使用要求,但如果对数据安全、数据库完整性和一致性有特殊要求,就需要了解SQL Server的锁机制,掌握数据库锁定方法。] 锁是数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性。 我们知道,多个用户能够同时操纵同一个数据库中 阅读全文
posted @ 2012-01-12 14:18 wangjj89621 阅读(4376) 评论(1) 推荐(0) 编辑
摘要: 如果你对自己并发控制的能力很有自信的话,读完“一、问题提出”后直接可以跳转到“四、看来问题真不简单”处阅读。本文最后给出了部分测试用代码的简单讲解。 一、问题提出设某银行存款帐户数据如下表:现在要求编写一程序,完成两项功能:存款与取款。每次操作完成后向明细表中插入一行记录并更新帐户余额。 二、问题似乎很简单解决办法:① 读取最后一行记录的帐户余额数据② 根据存、取款金额计算出新的帐户余额③ 将新的记录插入表中真的这么简单?在不考虑并发问题的情况下是可行的如果考虑并发,问题就多了(导致余额计算错误!请参考幻灯片与案例代码) 三、让我来想一想既然存在并发问题,那么解决并发问题的最好办法就是加锁呀! 阅读全文
posted @ 2012-01-12 11:15 wangjj89621 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 1 如何锁一个表的某一行 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT * FROM table ROWLOCK WHERE id = 1 2 锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 加锁语句: sybase: update 表 set col1=col1 where 1=0 ; MSSQL: select col1 from 表 (tablockx) where 1=0 ; oracle: LOCK TABLE 表 IN EXCLUSIVE MODE ; 加锁后其它人不可操作 阅读全文
posted @ 2012-01-12 11:12 wangjj89621 阅读(550) 评论(0) 推荐(0) 编辑