数据库笔记14:处理事务与锁

举报
howard2005 发表于 2021/12/30 02:25:33 2021/12/30
【摘要】 /***********************  第十四单元 处理事务与锁 ***********************/ /*   知识点学习,大家参看教材P248~250      1、事务的概念 &nbs...
/***********************
 第十四单元 处理事务与锁
***********************/

/*
  知识点学习,大家参看教材P248~250
  
  1、事务的概念
  一个逻辑工作单元,具有四个特性:原子性、一致性、隔离性、持久性
  2、事务的操作
  (1)开始事务:BEGIN TRANSACTION
  (2)提交事务:COMMIT TRANSACTION
  (3)回滚事务:ROLLBACK TRANSACTION
  3、在事务中不能使用的T-SQL语句
*/

/*
 任务一、定义/提交事务
*/

--1. 定义一个事务,在StuCou表里插入三条选课记录(同一个学生选三门课程),并提交

BEGIN   TRANSACTION   --开始事务
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '001' , 1 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '002' , 2 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '003' , 3 , '报名' );
COMMIT   TRANSACTION   --提交事务

--2. 验证,是否成功地插入了三条选课记录

SELECT   *
FROM   StuCou
WHERE   StuNo = '00000025' ;

--3. 删除刚才插入的三条选课记录

DELETE   FROM   StuCou
WHERE   StuNo = '00000025' ;

/*
 任务二、回滚事务
*/

--1. 定义一个事务,在StuCou表里插入三条选课记录(同一个学生选三门课程),并回滚

BEGIN   TRANSACTION   --开始事务
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '001' , 1 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '002' , 2 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '003' , 3 , '报名' );
ROLLBACK   TRANSACTION   --回滚事务

--2. 验证,是否插入了三条选课记录

SELECT   *
FROM   StuCou
WHERE   StuNo = '00000025' ;

/*
 任务三、定义事务 --> 提交事务 | 回滚事务
*/

--1. 定义一个事务,向StuCou表中插入多行数据,如果报名课程数超过3门,则回滚事务,否则提交事务。

BEGIN   TRANSACTION   --开始事务
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '001' , 1 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '002' , 2 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '003' , 3 , '报名' );
DECLARE  @ CourseNum   INT
SET  @ CourseNum =( SELECT   COUNT (*)   FROM   StuCou   WHERE   StuNo = '00000025' )
IF  @ CourseNum <= 3
    BEGIN
      COMMIT   TRANSACTION   --提交事务
      PRINT   '恭喜,选课成功!'
    END
ELSE
    BEGIN
       ROLLBACK   TRANSACTION   --回滚事务
       PRINT   '遗憾,你报选门数超过三门,无效!'
    END
  
--2. 验证,是否插入了三条选课记录

SELECT   *
FROM   StuCou
WHERE   StuNo = '00000025' ;

--3. 删除刚才插入的三条选课记录

DELETE   FROM   StuCou
WHERE   StuNo = '00000025' ;

--4. 定义一个事务,向StuCou表中插入多行数据,如果报名课程数超过3门,则回滚事务,否则提交事务。

BEGIN   TRANSACTION   --开始事务
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '001' , 1 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '002' , 2 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '003' , 3 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '004' , 4 , '报名' );
INSERT   INTO   StuCou ( StuNo , CouNo , WillOrder , State )   VALUES   ( '00000025' , '005' , 5 , '报名' );
DECLARE  @ CourseNum   INT
SET  @ CourseNum =( SELECT   COUNT (*)   FROM   StuCou   WHERE   StuNo = '00000025' )
IF  @ CourseNum <= 3
    BEGIN
      COMMIT   TRANSACTION   --提交事务
      PRINT   '恭喜,选课成功!'
    END
ELSE
    BEGIN
       ROLLBACK   TRANSACTION   --回滚事务
       PRINT   '遗憾,你报选门数超过三门,无效!'
    END

文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。

原文链接:howard2005.blog.csdn.net/article/details/79451339

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。