数据库笔记14:处理事务与锁
        【摘要】 
                    
 /***********************
  第十四单元 处理事务与锁
 ***********************/
 
 /*
   知识点学习,大家参看教材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)