易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL锁机制和事务隔离级别(转)

NOLOCK和READPAST的区别。
1.开启一个事务执行插入数据的操作。
BEGIN TRAN t
INSERT INTO Customer
SELECT 'a','a'
2.执行一条查询语句。
SELECT * from Customer WITH (NOLOCK)
结果中显示”a”和”a”。当1中事务回滚后,那么a将成为脏数据。(注:1中的事务未提交) 。NOLOCK表明没有对数据表添加共享锁以阻止其它事务对数据表数据的修改。
SELECT * from Customer
这条语句将一直死锁,直到排他锁解除或者锁超时为止。(注:设置锁超时SET LOCK_TIMEOUT 1800)
SELECT * from Customer WITH (READPAST)
这条语句将显示a未提交前的状态,但不锁定整个表。这个提示指明数据库引擎返回结果时忽略加锁的行或数据页。
3.执行一条插入语句。
BEGIN TRAN t
INSERT INTO Customer
SELECT 'b','b'
COMMIT TRAN t
这个时候,即使步骤1的事务回滚,那么a这条数据将丢失,而b继续插入数据库中。 
 
NOLOCK
1. 执行如下语句。
BEGIN TRAN ttt
SELECT * from Customer WITH (NOLOCK)
WAITFOR delay '00:00:20'
COMMIT TRAN ttt
注:NOLOCK不加任何锁,可以增删查改而不锁定。
INSERT INTO Customer SELECT 'a','b' –不锁定
DELETE Customer where ID=1 –不锁定
SELECT * from Customer –不锁定
UPDATE Customer SET Title='aa' WHERE ID=1 –不锁定
 
ROWLOCK
1.执行一条带行锁的查询语句。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ -- (必须)
BEGIN TRAN ttt
SELECT * from Customer WITH (ROWLOCK) WHERE ID=17
WAITFOR delay '00:00:20'
COMMIT TRAN ttt
注:在删除和更新正在查询的数据时,会锁定数据。对其他未查询的行和增加,查询数据无影响。
INSERT INTO Customer SELECT 'a','b' –不等待
 
DELETE Customer where ID=17 –等待
DELETE Customer where ID<>17 –不等待
 
SELECT * from Customer –不等待
 
UPDATE Customer SET Title='aa' WHERE ID=17–等待
UPDATE Customer SET Title='aa' WHERE ID<>17–不等待
 
 
HOLDLOCK,TABLOCK和TABLOCKX
1.执行HOLDLOCK
BEGIN TRAN ttt
SELECT * from Customer WITH (HOLDLOCK)
WAITFOR delay '00:00:10'
COMMIT TRAN ttt
注:其他事务可以读取表,但不能更新删除  
update Customer se


相关文档:

航空公司管理系统(VC++ 与SQL 2005)

系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
      这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......

SQL SERVER 用sql语句如何获得当前系统时间


SQL SERVER 2000用sql语句如何获得当前系统时间
就是用GETDATE();
Sql中的getDate()2008年01月08日 星期二 14:59
Sql Server 中一个非常强大的日期格式化函数
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2008 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/08
Select CONVERT(varchar(100), ......

MS Sql server查看对象方法(完善中)

MS Sql server 数据库
1.按定义时存储状态分行显示定义(sp_helptext存储过程),调用:Exec sp_helptext '对象名'
2.以表格形式显示返回相关参数(sys.objects视图),调用:select * from sys.objects where name='对象名'
3.作为结果集显示定义(object_definition),调用:select object_definition(object_id('对象名 ......

SQL Server密码破解工具简介

在对SQL Server系统执行入侵测试或者更高级别的安全审计时,有一种测试不应该被忽略,那就是SQL Server密码测试。这一点看起来显而易见,但是很多人都会忽略它。
  密码测试可以帮助检查恶意入侵者或者外部攻击者,测试他们要强行进入数据库有多容易,而且还可以确保SQL Server用户对他们的账号负责。此外,测试密码的漏 ......

SQL Server运作的简短课程

面对现实吧,虽然你从来没有打算成为一名SQL Server专家,但是随着数据库引擎种类和版本的增加,这就要求一些人来专门从事并关注这方面的内容。作为“微软人”(或者称为Gal),无论你是不是愿意,你都被选中了。这一系列的文章全都是关于帮助作为管理员而非程序员的你在使用SQL Server时更加高效。
  在实际执行 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号