/***********************
 第十四单元 处理事务与锁
***********************/
/*
  知识点学习,大家参看教材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

数据库笔记14:处理事务与锁相关推荐

  1. 数据库系列7:事务与锁的实现原理

    1.数据库事务的特征 1.1事务的四大特征ACID 原子性Atomicity:对数据库的一系列操作,要么全成功,要么全失败.如果前面的操作成功了,后面的失败了,就必须回滚. 隔离性 Isolation ...

  2. 数据库语言SQL:事务,锁,索引

    目录 1. 事务 1.1 事务的作用 1.2 提交事务 1.3 事务的状态和性质(原子,一致,隔离,持久) 2. 锁 2.1 锁的机制 2.2 常见锁举例 2.3 锁等待和死锁 2.4 锁争用 3. ...

  3. 大白话关系型数据库:索引,事务,锁

    感谢阅读.也欢迎大家可以去看<MySQL技术内幕>和橘黄色的<算法>. 前言 数据库是软件开发的核心,因为一个软件如果要有状态,也就是它记得你什么时候操作过什么,那么数据要持久 ...

  4. redis完整笔记总结-数据类型-事务与锁-集群-分布式锁-常见问题(缓存穿透、击穿、雪崩)

    1. 数据类型 五大基本类型 String hash -> 类似map list set -> zset -> 基于set的有序集合 新增 bitmaps:其实就是string,主要 ...

  5. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  6. MySQL学习笔记 04、MySQL进阶(索引、事务、锁)

    文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...

  7. 同时更改一条数据_数据库中的引擎、事务、锁、MVCC(二)

    二.事务 介绍锁之前,咱们先介绍一下 什么叫做事务. 事务就是一组对数据库的一系列的操作,要么同时成功,要么同时失败. 1.事务的特性(ACID): 原子性:事务是整个操作,不可分割,要么都成功,要么 ...

  8. 数据库事务及锁机制介绍

    2019独角兽企业重金招聘Python工程师标准>>> 事务介绍 因为一直使用Spring这种声明式的事务管理,一直以为事务的主要作用是对一个业务方法中多次执行数据库操作的最终提交. ...

  9. mysql如何实现读提交锁_MySQL学习笔记(二)—MySQL事务及锁详解

    一.事务 数组库的一组操作,要么全部成功,要么全部失败 举例:银行转账 A账户向B账户转100 A账户余额扣去100 B账户余额增加100 上述两个操作要么全部成功,要么全部失败,部分成功或失败,数据 ...

最新文章

  1. 微软、商汤等专家纵论AI未来:三年内主要趋势及挑战是什么?
  2. Ubuntu 9.04安设教程(傻瓜版)
  3. js怎么实现对html代码加密解密,javascript脚本加密解密及HTML转JS
  4. 2016微软开发者峰会在京举办 纳德拉要来做演讲
  5. Windows远程文件拷贝openEuler--WinSCP
  6. LVIS挑战赛冠军总结 | 视觉任务中长尾分布问题研究进展与挑战
  7. 研究cegui,写脚本
  8. java程序与数据库连接_将Java程序与数据库进行连接的操作方法
  9. [读书笔记]普林斯顿微积分读本(修订版)-未完工
  10. 线下实体零售门店如何做好会员运营管理系统?
  11. 网易数据中台获评工信部2019“十佳大数据案例”
  12. Autumn中文文档1:部署运行
  13. 活法 - 第五章 宇宙潮涌 因果之法
  14. 磨金石教育摄影技能干货分享||如何将平凡的窗户拍出美感
  15. 软件工程导论第六版 第一章 软件工程学概述知识点总结(下)
  16. 你知道外卖cps是什么吗?(附裂变分销小程序源码搭建教程)
  17. 快来围观,又一个大厂首席架构师真正财务了
  18. python ipv6 linux,通过Paramiko到ipv6 linux machin的SFTP
  19. Ajax - timeout设置ajax请求超时 timeout
  20. docker安装redis图文教程(详细)

热门文章

  1. 只需两步手把手教你玩转图像识别
  2. 【Angular专题】 (3)装饰器decorator,一块语法糖
  3. 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读
  4. java注释修改_java – 使用注释修改方法
  5. 高等组合学笔记(十二):Bell多项式,二项式型多项式序列,Faà di Bruno公式
  6. SQL Server单表查询语句
  7. MediaPlayer 的prepareAsync called in state 8 错误
  8. 深度linux系统反复重启,修复启动
  9. php测试系统登录超时,thinkphp后台检测用户登录超时的实现方法
  10. 加载慢_解决游戏加载慢不必大刀阔斧升改,教你一个简单有效的方法