--
--21.4.2节示例
--
启用事务t1执行修改操作
BEGIN TRAN t1 --开启一个事务更新表
UPDATE Person.AddressType
SET ModifiedDate=GETDATE()
启用事务t2执行修改操作
BEGIN TRAN t2 --开启另一个事务更新表
UPDATE Person.Address
SET ModifiedDate=GETDATE()
UPDATE Person.Address --更新其他表
SET ModifiedDate=GETDATE()
UPDATE Person.AddressType --交叉更新表
SET ModifiedDate=GETDATE()
--
--21.4.3节示例
--
创建测试用表和数据
USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ --设置为可重复读
BEGIN TRAN A --启用事务读取数据
SELECT *
FROM Person.AddressType
UPDATE Person.AddressType --更新表中的数据
SET ModifiedDate=GETDATE()
--
--21.4.4节示例
--
创建单表死锁测试表
CREATE TABLE t1
(
c1 INT NOT NULL PRIMARY KEY, --聚集索引
c2 INT NOT NULL,
c3 VARCHAR(8)
)
GO
CREATE INDEX IX_t1_c2 ON t1(c2) --非聚集索引
SET NOCOUNT ON
DECLARE @i INT=1 添加1000条测试数据
WHILE @i<=1000
BEGIN
INSERT INTO t1 VALUES(@i,@i,'test')
SET @i+=1
END
对表执行UPDATE操作
SET NOCOUNT ON --不显示受影响的行数
WHILE 1=1 --死循环
BEGIN
UPDATE t1
SET c2=10000-c2 --在100和9900之间轮换
WHERE c1=100
END
对表执行SELECT操作
WHILE 1=1
BEGIN
SELECT c3 --查询数据
FROM t1
WHERE c2=100
END
重新创建非聚集索引
DROP INDEX t1.IX_t1_c2
GO
CREATE INDEX IX_t1_c2 --创建包含索引
ON t1(c2)
INCLUDE(c3) --将c3字段包含在索引中
--
--21.4.5节示例
--
dbcc traceon(1222,1204,3605,-1)