十八、MySQL之TCL事务控制语言(详解)

TCL :

Transaction Control Language 事务控制语言

零、MySQL 中的存储引擎

1、概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中。
2、通过show engines;来查看mysql支持的存储引擎。
3、 在mysql中用的最多的存储引擎有:innodb,myisam ,memory 等。其中innodb支持事务,而myisam、memory等不支持事务
在这里插入图片描述

一、事务:

事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。

案例:转账

张三丰 1000 郭襄 1000

update 表 set 张三丰的余额=500 where name=‘张三丰’
意外
update 表 set 郭襄的余额=1500 where name=‘郭襄’

事务的特性:ACID
1. 原子性:一个事务不可再分割,要么都执行要么都不执行
2. 一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
3. 隔离性:一个事务的执行不受其他事务的干扰
4. 持久性:一个事务一旦提交,则会永久的改变数据库的数据.

二、事务的创建

  1. 隐式事务:事务没有明显的开启和结束的标记
    比如insert、update、delete语句
    delete from 表 where id =1;
    在这里插入图片描述

  2. 显式事务:事务具有明显的开启和结束的标记
    前提:必须先设置自动提交功能为禁用
    set autocommit=0;
    在这里插入图片描述

步骤1:开启事务
set autocommit=0;必须写
start transaction;可省略不写
步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
...步骤3:结束事务
commit;提交事务
或者
rollback;回滚事务savepoint 节点名;设置保存点

三、事务的隔离级别:

脏读不可重复读幻读
read uncommitted
read committedX
repeatable readXX
serializableXXX

对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没
有采取必要的隔离机制, 就会导致各种并发问题:

  1. 脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.
  2. 不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.
  3. 幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.

数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题.
一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔
离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就
越好, 但并发性越弱.

数据库提供的 4 种事务隔离级别:
在这里插入图片描述
Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE。 Oracle 默认的事务是第二个隔离级别为: READ COMMITED
Mysql 支持 4 种事务隔离级别. Mysql 默认的事务是第三个隔离级别为: REPEATABLE READ

  1. 查看隔离级别
    select @@tx_isolation;
  2. 设置隔离级别
    set session|global transaction isolation level 隔离级别;
  3. 开启事务的语句;
    update 表 set 张三丰的余额=500 where name=‘张三丰’
    update 表 set 郭襄的余额=1500 where name=‘郭襄’
    结束事务的语句;

每启动一个 mysql 程序, 就会获得一个单独的数据库连接. 每个数据库连接都有一个全局变量 @@tx_isolation, 表示当前的事务隔离级别.

  • 查看当前的隔离级别: SELECT @@tx_isolation;
  • 设置当前 mySQL 连接的隔离级别:
    set transaction isolation level read committed;
  • 设置数据库系统的全局的隔离级别:
    set global transaction isolation level read committed;

在这里插入图片描述
在这里插入图片描述

四、代码演示

SHOW VARIABLES LIKE 'autocommit';
SHOW ENGINES;

1.演示事务的使用步骤

#开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
UPDATE account SET balance = 1000 WHERE username='张无忌';
UPDATE account SET balance = 1000 WHERE username='赵敏';#结束事务
ROLLBACK;
#commit;SELECT * FROM account;

在这里插入图片描述
在这里插入图片描述
2. 演示事务对于delete和truncate的处理的区别:
在事务中,delete 删除表是支持rollback回滚的;
但是,truncate 删除表是不支持rollback回滚

# 2. delete 和 truncate 在事务使用时的区别
# 演示delete
set autocommit=0;
start transaction;
delete from account;
ROLLBACK;# 演示truncate
set autocommit=0;
start transaction;
truncate TABLE account;
ROLLBACK;
SELECT * from account;

在这里插入图片描述
在这里插入图片描述

  1. 演示savepoint 的使用
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=1;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id=2;
ROLLBACK TO a;#回滚到保存点SELECT * FROM account;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2220. 转换数字的最少位翻转次数(位运算)

文章目录1. 题目2. 解题1. 题目 一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作,即将 0 变成 1 ,或者将 1 变成 0 。 比方说,x 7 ,二进制表示为 111 ,我们可以选择任意一个位(包含没有显示…

UITextField属性

UITextField属性 0、enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的。1、borderStyle 设置边框样式,只有设置了才会显示边框样式text.borderStyle UITextBorderStyleRoundedRect;ty…

LeetCode 2221. 数组的三角和

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums ,其中 nums[i] 是 0 到 9 之间(两者都包含)的一个数字。 nums 的 三角和 是执行以下操作以后最后剩下元素的值: nums 初始包含 n 个元素。如果 n 1 &…

十九、MySQL常用命令总结

数据结构核心原理与算法应用C:\Windows\system32> net stop mysql0815MySQL0815 服务正在停止. MySQL0815 服务已成功停止。C:\Windows\system32>net start mysql0815 MySQL0815 服务正在启动 . MySQL0815 服务已经启动成功。C:\Windows\system32>mysql -h localhost…

移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)

移动web开发之rem布局 一、rem基础 rem单位 rem (root em)是一个相对单位,类似于em,em是父元素字体大小。 不同的是rem的基准是相对于html元素的字体大小。 比如,根元素(html)设置font-size12px; 非根元素设置wid…

LeetCode 2222. 选择建筑的方案数

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的二进制字符串 s ,它表示一条街沿途的建筑类型,其中: s[i] 0 表示第 i 栋建筑是一栋办公楼,s[i] 1 表示第 i 栋建筑是一间餐厅。 作为市政厅的官员,你需要随…

内存管理 内存泄漏

垃圾回收机制是周期性的,按照特定的周期循环,或者按照预先定义的时间执行最流行的回收机制是mark-and-sweep当一个变量进入当前上下文,那么会被标示为在上下文中,内存不会被释放,当他离开会被标示为不在上下文&#xf…

LeetCode 2224. 转化时间需要的最少操作数(贪心)

文章目录1. 题目2. 解题1. 题目 给你两个字符串 current 和 correct ,表示两个 24 小时制时间 。 24 小时制时间 按 "HH:MM" 进行格式化,其中 HH 在 00 和 23 之间,而 MM 在 00 和 59 之间。 最早的 24 小时制时间为 00:00 &…

移动端WEB开发之响应式布局(响应式开发原理、bootstrap、阿里百秀案例)

移动端WEB开发之响应式布局 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的。 设备的划分情况&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><…

【原创】Java实现手机号码归属地查询

网络上已经有很多的手机号码归属地查询的API接口&#xff0c;但是这些接口总是有一些大大小小的缺陷。 总结一下这些缺陷&#xff1a; 1、要直接将它的搜索框链接形式粘到自己的页面&#xff0c;点击查询的时候还要跳转到他们的网站来展示归属地结果 2、提供接口的API&#xff…

jQuery学习笔记系列(三)——事件注册、事件处理、事件对象、拷贝对象、多库共存、jQuery插件、toDoList综合案例

day03 - jQuery 学习目标&#xff1a; 能够说出4种常见的注册事件 能够说出 on 绑定事件的优势 能够说出 jQuery 事件委派的优点以及方式 能够说出绑定事件与解绑事件 能够说出 jQuery 对象的拷贝方法 能够说出 jQuery 多库共存的2种方法 能够使用 jQuery 插件 1.1. jQuery 事件…

LeetCode 2225. 找出输掉零场或一场比赛的玩家(计数)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 matches 其中 matches[i] [winneri, loseri] 表示在一场比赛中 winneri 击败了 loseri 。 返回一个长度为 2 的列表 answer &#xff1a; answer[0] 是所有 没有 输掉任何比赛的玩家列表。answer[1] 是所有恰好输掉 一场 比…

BZOJ4068 : [Ctsc2015]app

对于一个所选任务集合&#xff0c;如果对于任意时刻$i$&#xff0c;$i$前面所选任务数都不超过i的话&#xff0c;那么这些任务可以全选。 维护一棵线段树$T$&#xff0c;第$i$个位置一开始为$i$&#xff0c;每使用一个任务&#xff0c;$[t,T]$都要减$1$。 插入一个任务&#xf…

Log4j配置文件

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的&#xff0c;它可接keyvalue格式的设置或xml格式的设置信息。通过配置&#xff0c;可以创建出Log4J的运行环境。 配置文件 Log4J配置文件的基本格式如下&#xff1a; #配置根Logger log4j.rootLog…

LeetCode 2226. 每个小孩最多能分到多少糖果(二分查找)

文章目录1. 题目2. 解题1. 题目 给你一个 下标从 0 开始 的整数数组 candies 。数组中的每个元素表示大小为 candies[i] 的一堆糖果。你可以将每堆糖果分成任意数量的 子堆 &#xff0c;但 无法 再将两堆合并到一起。 另给你一个整数 k 。你需要将这些糖果分配给 k 个小孩&am…

指令系统——数据寻址(3)——堆栈寻址(详解)

一、总览 二、堆栈寻址 堆栈寻址&#xff1a;操作数存放在堆栈中&#xff0c;隐含使用堆栈指针&#xff08;SP&#xff09;作为操作数地址。堆栈是存储器&#xff08;或专用寄存器组&#xff09;中一块特定的按“后进先出&#xff08;LIFO&#xff09;” 原则管理的存储区&…

POJ1061 青蛙的约会(线性同余方程)

线性同余方程$ ax \equiv b \pmod n$可以用扩展欧几里得算法求解。 这一题假设青蛙们跳t次后相遇&#xff0c;则可列方程&#xff1a; $$ MtX \equiv NtY \pmod L$$ $$ (M-N)t \equiv Y-X \pmod L$$ 于是就构造出一个线性同余方程&#xff0c;即可对t求解&#xff0c;解出最小非…

指令系统 CISC和RISC(详解)

一、总览 二、CISC CISC:Complex Instruction Set Computer设计思路&#xff1a;一条指令完成一个复杂的基本功能。代表&#xff1a;86架构&#xff0c;主要用于笔记本、台式机等。 80-20规律&#xff1a;典型程序中80%的语句仅仅使用处理机中20%的指令 三、RISC RISC:Reduc…

LeetCode 2231. 按奇偶性交换后的最大数字

文章目录1. 题目2. 解题1. 题目 给你一个正整数 num 。你可以交换 num 中 奇偶性 相同的任意两位数字&#xff08;即&#xff0c;都是奇数或者偶数&#xff09;。 返回交换 任意 次之后 num 的 最大 可能值。 示例 1&#xff1a; 输入&#xff1a;num 1234 输出&#xff1a…

亲密接触Redis-第一天

引言nosql&#xff0c;大规模分布式缓存遍天下&#xff0c;Internet的时代在中国由其走得前沿&#xff0c;这一切归功于我国特色的电商。因此nosql、大数据技术在中国应用的比国外还要前沿。从这一章开始我们将开始进入到真正的SOA、PAAS、SAAS、互联网的领域&#xff0c;因此每…