第十一章 事务和锁
来源:互联网 发布:程序员必备电子产品 编辑:程序博客网 时间:2024/05/18 17:26
【例11.1】限定stu_info表中最多只能插入10条学生记录,如果表中插入人数大于10人,插入失败,操作过程如下。
USE test;
GO
BEGIN TRANSACTION
INSERT INTO stu_info VALUES(22,'路飞',80,'男',18);
INSERT INTO stu_info VALUES(23,'张露',85,'女',18);
INSERT INTO stu_info VALUES(24,'魏波',70,'男',19);
INSERT INTO stu_info VALUES(25,'李婷',74,'女',18);
DECLARE @studentCount INT
SELECT @studentCount=(SELECT COUNT(*) FROM stu_info)
IF @studentCount > 10
BEGIN
ROLLBACK TRANSACTION
PRINT '插入人数太多,插入失败!'
END
ELSE
BEGIN
COMMIT TRANSACTION
PRINT '插入成功!'
END
【例11.2】锁定stu_info表中s_id=2的学生记录,输入语句如下。
USE test;
GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM stu_info ROWLOCK WHERE s_i2;
【例11.3】锁定stu_info表中记录,输入语句如下。
USE test;
GO
SELECT s_age FROM stu_info(TABLELOCKX) WHERE s_age=18;
【例11.4】创建名称为transaction1和transaction2的事务,在transaction1事务上面添加排他锁,事务1执行10秒钟之后才能执行transaction2事务,输入语句如下。
USE test;
GO
BEGIN TRAN transaction1
UPDATE stu_info SET s_score=88 WHERE s_name='许三' ;
WAITFOR DELAY '00:00:10';
COMMIT TRAN
BEGIN TRAN transaction2
SELECT * FROM stu_info WHERE s_name='许三';
COMMIT TRAN
【例11.5】创建名称为transaction1和transaction2的事务,在transaction1事务上面添加共享锁,允许两个事务同时执行查询操作,如果第二个事务要执行更新操作,必须等待10秒钟,输入语句如下。
USE test;
GO
BEGIN TRAN transaction1
SELECT s_score,s_sex,s_age FROM stu_info WITH(HOLDLOCK) WHERE s_name='许三';
WAITFOR DELAY '00:00:10';
COMMIT TRAN
BEGIN TRAN transaction2
SELECT * FROM stu_info WHERE s_name='许三';
--UPDATE stu_info SET s_score=90 WHERE s_name='许三' ;
COMMIT TRAN
USE test;
GO
BEGIN TRANSACTION
INSERT INTO stu_info VALUES(22,'路飞',80,'男',18);
INSERT INTO stu_info VALUES(23,'张露',85,'女',18);
INSERT INTO stu_info VALUES(24,'魏波',70,'男',19);
INSERT INTO stu_info VALUES(25,'李婷',74,'女',18);
DECLARE @studentCount INT
SELECT @studentCount=(SELECT COUNT(*) FROM stu_info)
IF @studentCount > 10
BEGIN
ROLLBACK TRANSACTION
PRINT '插入人数太多,插入失败!'
END
ELSE
BEGIN
COMMIT TRANSACTION
PRINT '插入成功!'
END
【例11.2】锁定stu_info表中s_id=2的学生记录,输入语句如下。
USE test;
GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM stu_info ROWLOCK WHERE s_i2;
【例11.3】锁定stu_info表中记录,输入语句如下。
USE test;
GO
SELECT s_age FROM stu_info(TABLELOCKX) WHERE s_age=18;
【例11.4】创建名称为transaction1和transaction2的事务,在transaction1事务上面添加排他锁,事务1执行10秒钟之后才能执行transaction2事务,输入语句如下。
USE test;
GO
BEGIN TRAN transaction1
UPDATE stu_info SET s_score=88 WHERE s_name='许三' ;
WAITFOR DELAY '00:00:10';
COMMIT TRAN
BEGIN TRAN transaction2
SELECT * FROM stu_info WHERE s_name='许三';
COMMIT TRAN
【例11.5】创建名称为transaction1和transaction2的事务,在transaction1事务上面添加共享锁,允许两个事务同时执行查询操作,如果第二个事务要执行更新操作,必须等待10秒钟,输入语句如下。
USE test;
GO
BEGIN TRAN transaction1
SELECT s_score,s_sex,s_age FROM stu_info WITH(HOLDLOCK) WHERE s_name='许三';
WAITFOR DELAY '00:00:10';
COMMIT TRAN
BEGIN TRAN transaction2
SELECT * FROM stu_info WHERE s_name='许三';
--UPDATE stu_info SET s_score=90 WHERE s_name='许三' ;
COMMIT TRAN
--课后练习
--create database index_test
--use index_test
--create table writers
--(
-- w_id int primarwritersy key not null,
-- w_name varchar(255) not null,
-- w_address varchar(255),
-- w_age char(2) not null,
-- w_note varchar(255)
--);
--为w_id创建索引
--use index_test
--create unique clustered index UniqIdx
--on writers(w_id desc)
--use index_test
--create unique nonclustered index NAIdx
--on writers(w_name,w_address)
----重命名
--use index_test
--go
--exec sp_rename 'writers.NAIdx','muti_index','index'
--查看muti_index索引的统计信息
--dbcc show_statistics('index_test.dbo.writers',muti_index)
--删除索引
--use index_test
--drop index writers.muti_index
0 0
- 第十一章 事务和锁
- 第十一章 进程和信号
- 第十一章 类和对象
- 第十一章 进程和信号
- 第十一章 文件和流
- LDD 第十一章 学习要点和作业
- 第十一章:查看和管理进程
- 第十一章:查看和管理进程2
- 第十一章 进程和信号(一)
- 第十一章 进程和信号(二)
- 第十一章 进程和信号(三)
- 第十一章 继承和派生(一)
- 第十一章 继承和派生(二)
- 第十一章 字符串和字符串数组
- 第十一章 字符串和字符函数
- JAVA逻辑 第十一章:类和对象
- 第十一章 类和对象复习
- C和指针读书笔记(第十一章)
- 获取当前日期
- LEETCODE-Excel Sheet Column Number
- @Qualifier注解
- linux下建立一个c++工程
- 国内好用的免费DNS服务器
- 第十一章 事务和锁
- Android Studio使用新的Gradle构建工具配置NDK环境
- 现实格言
- LeetCode 258 : Add Digits
- 关于quartz-2.1.6.jar,quartz-oracle-2.1.6.jar,spring-beans-3.0.3整合
- AAA java向xml文件传值是通过属性properties进行的 spring + mybatis 动态切换数据源
- 多线程
- gcc编译参数-fPIC的一些问题
- 开发日志整理2【android layout用法注意点】