/***********************
 第十四单元 处理事务与锁
***********************/
/*
  知识点学习,大家参看教材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. 对话院士成果转化基地-丰收节交易会·李喜贵:谋定精准对接
  2. (原+转)ubuntu14中结束多个caffe进程中的某个
  3. NYOJ 460 项链
  4. 【常用模板】 01背包
  5. 网站部署nginx--uwsgi
  6. 口琴膜片什么作用_思域发动机舱里的这个东西是什么东东,它究竟有什么作用呢?...
  7. 【Java数据结构与算法】第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍
  8. 投资一个五星级酒店需要多钱?多长时间能回本?
  9. java多线程实例_要把Java吃透您得先吃透这些基本概念
  10. 与神经网络相比,你对P图一无所知
  11. LINUX编译sofia-sip
  12. web xml配置oracle数据源_SpringBoot2 整合JTA组件,多数据源事务管理
  13. 大数据行业人士必知10大数据思维原理
  14. ffmpeg安装教程
  15. 数字ic后端学习ing
  16. iis10 asp 如何连接mdb_如何攻破一个网站
  17. 返利网app android版
  18. 描述计算机内存的参数,电脑组装内存知识,你不能不知的内存参数介绍
  19. 样条曲线长度--数值积分
  20. 下载安装MarkDown保姆级

热门文章

  1. 补习系列(20)-大话 WebSocket 与 尬聊的实现
  2. php 判断编码 错误,请教一个 PHP 代码出错的原因(一个简单的计算器)
  3. Django使用Python操作数据库 --Django 1.8.2 文档(中文)部分笔记
  4. 解决Ubuntu18.04没有声音(简便且终极方法)
  5. 【python基础】ValueError: only 2 non-keyword arguments accepte
  6. ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)
  7. php 工厂模式作用,PHP工厂模式的好处
  8. LINUX如何让内存FREE变大,Linux性能优化(内存:free + top +vmstat )
  9. vue用公共组件页面传值_vuejs几种不同组件(页面)间传值的方式
  10. mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法