怎么编写能明显验证事务级别的测试脚本?小菜鸟求教
当两个过程串行,执行的时候,第一个过程的事务级别设置,影响到第二个过程吗?
当两个过程串行,执行的时候,第一个过程的事务级别设置,影响到第二个过程吗?
解决方案 »
- 远程为什么连接不了sqlserver2000服务器?
- 安装了sqlserver2005开发版为何不能附加数据库?没有菜单
- 一段JDBC代码,帮忙分析下
- SQL Server 2005 统计学生成绩
- 问个数据库问题,请高手指点
- 急!安装msde中途出错,不能够使用,反安装不行,提示找不到什么文件,重新安装也不覆盖,请问。。。
- 怎样备份SQL的作业
- 急!急!急!请各位SQL-SERVER 2000高手务必过来看一下,高分赠送!!
- 如何用vfp输出图形?????
- 用isql命令执行.sql遇到困难,我采用的是nt认证
- SQL 创建规则语句总是提示关键字 'execute' 附近有语法错误???
- 请问一个sys.sysmessages表的问题.
http://zzh.javaeye.com/blog/391236
--打开两个查询窗口
--一个输入
BEGIN TRAN UPDATE TBALEXX SET XX='' WHERE XX=''WAITFOR DELAY '00:01'COMMIT
--另一个输入
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM TBALEXX
--等待结果出来了 再输入
SELECT * FROM TBALEXX
默认在第2级:Read Commited.
Create table Status
(
RecordID int not null,
I_Batcho_No int ,
C_Status varchar(255)
)
Insert into Status values (5,1000,'脏读')--连接一:
USE Status_Record
GO
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'TEST1'AND TYPE = 'P' )
DROP PROCEDURE TEST1PRINT 'CREATE PROCEDURE TEST1...'
GOCREATE PROCEDURE TEST1
WITH ENCRYPTION
AS SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET ROWCOUNT 0
SELECT * FROM Status_Record..Status WHERE C_Status = '脏读'
GOUSE Status_Record
GO
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'TEST3'AND TYPE = 'P' )
DROP PROCEDURE TEST3PRINT 'CREATE PROCEDURE TEST3...'
GOCREATE PROCEDURE TEST3
WITH ENCRYPTION
AS
SET ROWCOUNT 0
SELECT * FROM Status_Record..Status WHERE C_Status = '脏读'
GO--EXEC TEST1
--EXEC TEST3 // 这个一直是COMMIT的效果(默认隔离级别吗?)--连接2
USE Status_Record
GO
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'TEST2'AND TYPE = 'P' )
DROP PROCEDURE TEST2PRINT 'CREATE PROCEDURE TEST2...'
GOCREATE PROCEDURE TEST2
WITH ENCRYPTION
AS
SET ROWCOUNT 0
BEGIN TRAN
UPDATE Status_Record..Status SET I_Batcho_No = 2000 WHERE C_Status = '脏读'
WAITFOR DELAY '00:00:10' --等待10秒
UPDATE Status_Record..Status SET I_Batcho_No = 3000 WHERE C_Status = '脏读'
COMMIT TRAN
GO--EXEC TEST2
Create table Status
(
RecordID int not null,
I_Batcho_No int ,
C_Status varchar(255)
)
Insert into Status values (5,1000,'脏读')这个是数据库在事务自动提交模式下运行的,所以等你执行完这个insert之后,就commit了
详细的测试步骤和结果是什么?对结果有什么疑问?这样才能回答楼主的问题呀.
1.在连线2先 exec TEST2 ?
2.在连线2延时的10秒期间,连线1先执行 exec TEST1 再 exec TEST3?
步骤的确是这样的:
1.在连线2先 exec TEST2 ?
2.在连线2延时的10秒期间,连线1先执行 exec TEST1 再 exec TEST3?结果:连线1的TEST1的设置脏读 没有影响到 TEST3,TEST3是默认的第二级;疑问:在一个连线中,设置隔离级别的作用域不是整个连线吗?我百度过,都是这么说的:设置的选项将一直对那个连接始终有效,直到显式更改该选项为止。和我测得结果不一样啊
放到CREATE PROCEDURE TEST1 ... 之外才能设置当前连线的事务隔离级别.
对当前查询分析器中的连线1不影响,默認還是read committed.