第24章:事务基础知识

news2024/11/23 21:20:21

一、数据库事务Transactions

1.为什么要使用事务

事务可以让数据库保持一致性,通过事务的机制恢复到某个时间点,即使系统崩溃数据库修改的数据不会丢失。

2.存储引擎支持事务的情况

命令: show engines;

只有InnoDB支持事务

 3.事务基本概念

事务:一组逻辑操作单元,使数据从一种状态变换为另一种状态。比如有一组增删改操作,要么全部成功,要么全部失败,整体的。

事务处理的原则:保证所有的事务都是一个工作单元执行,即使出现故障,也能恢复到某个时间点。当一个事务进行多个操作,所有事务提交commit,修改永久保存下来。要么放弃,事务回滚rollback到最初状态

转账案例:

 4.事务的ACID特性

①原子性

原子性是事务的一个不可分割的单位(整体性),要么全部提交commit,要么全部失败回滚rollback。

②一致性

一致性是指事务执行前后,数据从一个合法性状态变换为另一个合法性状态。合法性是业务逻辑合法,符合现实世界的约束,满足这个约束就是合法状态。在事务中某个操作失败,系统撤销当前的事务,返回事务之前的状态。自己定义的规则

举例1:

A账户200,转账300出去,此时账户-100。这个状态就不合法,余额>=0

举例2:

A账户200,转账50给B账户,A扣钱了,但是由于故障B余额没有增加。状态不合法,A+B余额不变。

③隔离性

事务的隔离性是指一个事务的执行不能被其他事务干扰,一个事务对数据进行操作,此时的数据对并发的其他事务是隔离的。各个事务之间互不干扰。

④持久性

持久性是指事务一旦提交,数据库数据的改变是永久性的。

持久性是通过事务日志保证的,日志包括重做日志和回滚日志。

重做日志:通过事务对数据进行修改时候,把数据库变化信息记录到重做日志。然后进行修改。即使系统故障。数据库重启找到重做日志,重新执行使事务由持久性。

5.事务的状态

①活动的

事务对应的数据库操作正在执行过程中时,还在对数据库进行增删改,该事务处在活动状态。

②部分提交的

事务的操作完成了,但操作在内存执行,还没有刷新到磁盘。此时就是部分提交的状态。

③失败的

事务在活动的或部分提交状态时,出现故障错误,此时是失败的。

④中止的

当事务失败时,进行回滚到恢复数据库之前的状态。

⑤提交的

部分提交的状态时,然后同步到磁盘上。事务提交的状态。

二、如何使用事务

事务有2种:显式事务和隐式事务

1.显示事务—手动提交

①开启事务start transaction;或begin;

②一系列DML操作

③结束状态:事务提交commit,回滚事务rollback to [savepoint]

保存点savepoint:事务中设置一个标志,用来标记事务的执行的某个位置,这个位置之前都可以回滚

④begin

一系列DML操作

commit

这是一个事务。

2.隐式事务—自动提交

①查看数据库事务自动提交的状态

SHOW VARIABLES LIKE 'autocommit';

②开启事务自动提交

SET autocommit = ON;

③关闭事务自动提交

SET autocommit = OFF;

④自动提交事务,每一条增删改就是一个事务。

3.隐式(自动)提交事务的情况

①对数据库,表,视图,存储过程进行create,alter,drop时。会自动提交语句之前的事务

②当修改数据库的表时,会自动提交语句之前的事务

③当使用手动提交事务start transaction或begin会自动提交之前事务。当系统变量autocommit调为ON自动提交事务。

三、事务的举例:提交与回滚,只有InnoDB支持

前提开启事务自动提交

set autocommit=on;

情况一:

 结果只有:张三

情况二:

 结果是:张三,李四

情况三:

 所以只有张三

情况四:

四、数据并发问题与4种隔离级别

1.数据并发出现的问题

①脏写update:更新失效,两个事务同时更新

当两个事务同时去更新某一条数据时,就肯定存在一前一后。当事务A更新时,还没有提交。事务B也过来更新,事务A覆盖了事务B更新的数据,这就是脏写。脏写导致数据丢失。

 ②脏读:读取到还没提交的数据

如果一个事务B向数据库更新数据,事务还没提交或终止。另一个事务A查询到了B还没提交的数据。这是脏读。

③不可重复读:两次读取内容不一样

有事务A对这行数据进行查询,此时事务B对这个数据进行了修改。事务A再次查询这个数据,发现两次读取的值不同。

④幻读:插入或删除记录

事务A查询数据表有多少行数,此时的事务B对这个数据表进行增加或删除记录。此时事务A再次查询,莫名其妙的发现数据记录遗失或增多。

 严重性: 脏写 > 脏读 > 不可重复读 > 幻读

2.SQL的四种隔离级别

①READ UNCOMMITTED:未提交读。所有事务能查询到其他事务未提交的执行结果。

②READ COMMITTED:已提交读。一个事务只能看到已提交事务的执行结果

③REPEATABLE READ:可重复读。事务A在读取一条数据之后,事务B对该数据进行修改并提交,事务A再次读取数据,读取到的还是原来内容(MySQL默认)

④SERIALIZABLE:可串行化。事务持续期间。禁止其他事务对这个表进行操作。性能低下

 

3.MySQL支持的四种隔离级别

①查看当前MySQL的隔离级别

MySQL5.7版本之前:SELECT @@tx_isolation;

MySQL5.7版本之后:SELECT @@transaction_isolation;

默认是REPEATABLE-READ,可重复读

②设置MySQL的隔离级别:

SET [GLOBAL|SESSION] TRANSACTION_ISOLATION = '隔离级别'

#其中,隔离级别格式:

> READ-UNCOMMITTED

> READ-COMMITTED

> REPEATABLE-READ

> SERIALIZABLE

③设置隔离级别global和session的影响

global:全局范围有效。对已存在的会话无效,只对设置后新的会话有效。

session当前会话有效。对当前会话的后续事务有效。

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

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

相关文章

【第四章 flutter学习之flutter基础组件】

文章目录 一、目录结构二、创建一个flutter项目三、创建自定义组件四、Container组件 就是divalignment 内容对齐方式decoration 类似border 为BoxDecoration的类 五、Text属性六、image组件六、icon组件总结、 一、目录结构 android、ios各自平台的资源文件 lib 项目目录 linu…

今天给大家分享两款实用的软件

在现代社会中,我们越来越依赖各种各样的软件来提高效率、获得信息和享受娱乐。所以,今天我将与大家分享两款我个人常用且非常实用的软件,一起来看看吧。 人工桌面: 人工桌面是一款备受欢迎的动态桌面壁纸软件,它为我们…

webRTC实现P2P音视频通话(无服务端)

文章目录 先看效果视频对话源码htmlvue2 音频对话源码遇到问题解决方案 先看效果 视频对话源码 html 虽然是vue项目&#xff0c;但是我写在了主页的index页面&#xff0c;仅仅为了测试&#xff0c; <!DOCTYPE html> <html lang"en"> <head><me…

mysql练习---备份/索引/视图

目录 一、备份与还原 二、索引 三、视图 一、备份与还原 CREATE DATABASE booksDB; use booksDB;CREATE TABLE books ( bk_id INT NOT NULL PRIMARY KEY, bk_title VARCHAR(50) NOT NULL, copyright YEAR NOT NULL );INSERT INTO books VALUES (11078, Learning MySQL, 2…

springboot mybatis 双数据库 多数据源

1. 依赖 mybatis相关&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version> </dependency> <dependency><groupId>com.baomid…

【socket编程】TCP服务器、UDP服务器、本地套接字【C语言代码实现】

目录 0. 准备知识 0.1 大小端概念 0.2 网络字节序和主机字节序的转换 0.3 点分十进制串转换&#xff08;IP地址转换函数&#xff09; 0.4 IPV4结构体&#xff1a;&#xff08;man 7 ip&#xff09; 0.5 IPV6套接字结构体&#xff1a;&#xff08;man 7 ipv6&#xff09; …

IllegalStateException,BeanCreationException报错解决

报错解决 but cannot be delegated to target bean. Switch its visibility to package or protected.

Java反射-反射API、类加载过程

反射 Java反射API是Java语言实现动态性的关键&#xff0c;它允许动态的创建对象、赋值、以及调用对象的方法&#xff0c;同时反射也是实现动态代理的关键&#xff0c;涉及到反射相关的几个类主要有 Class、ClassLoader&#xff0c;Field、Method、Constructor、Proxy等。因为在…

3D 目标检测 SFD 问题记录

问题1&#xff1a;read timeout 顺着网址手动下载&#xff0c;然后放入相应的目录下 问题2&#xff1a;SparseModule import spconv 要改写成 import spconv.pytorch as spconv 问题3&#xff1a;skimage pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/si…

MySQL备份、索引、视图

目录 一、备份 案例素材 1、使用mysqldump命令备份数据库中的所有表​编辑 2、备份booksDB数据库中的books表 ​3、使用mysqldump备份booksDB和test数据库 ​4、使用mysqldump备份服务器中的所有数据库 ​5、使用mysql命令还原第二题导出的books表 ​6、进入数据库使用…

cuda 线程索引ID的计算公式(图文)

博客中有一部分公式来自&#xff1a;cuda 线程索引ID的计算公式_blockidx.x_奕星星奕的博客-CSDN博客 我做的工作就是加了图更加形象的表示&#xff0c;还有公式的延申。 线程索引的计算公式 一个Grid可以包含多个Blocks&#xff0c;Blocks的组织方式可以是一维的&#xff0c;…

springboot人脸识别基于java的游戏推荐管理平台的设计及实现_0816qvue

表名&#xff1a;messages 功能&#xff1a;留言板 字段名称 类型 长度 字段说明 主键 默认值 id bigint 主键 主键 addtime timestamp 创建时间 CURRENT_TIMESTAMP userid bigint 留言人id username v…

数据结构--绪论

这里写目录标题 前言数据结构研究内容基本概念与术语数据元素与数据对象的区别数据结构逻辑结构存储结构 数据类型和抽象数据类型数据类型抽象数据类型定义格式举例 小结研究内容基础概念 抽象数据类型的表示和实现 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录…

什么是团体标准?

团体标准是由一个特定的组织、团体或行业共同制定的标准。它是一种在特定领域或行业中被广泛认可和采用的标准化文件&#xff0c;旨在规范产品、服务或流程的要求和规范。团体标准通常由行业协会、标准化组织或特定领域的专业团体开发&#xff0c;并经过广泛讨论、协商和验证&a…

【分享】报告!发现一个低代码数据可视化开发平台~

前言&#xff1a; 哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 最近木易巷发现了一个低代码数据可视化开发平台&#xff0c;快来看看吧~ 1、介绍 GoView 是一个拖拽式低代码数据可视化开发平台&#xff0c;旨在帮助用户快速构建数据大屏&#xff0c;同时减少心智负担。通…

【沈阳航空航天大学808】22年真题及解析

哈喽大家好&#xff0c;鉴于真题系列反馈很不错&#xff0c;我决定重启真题系列&#xff01; 今天分享的是沈阳航空航天大学808信号与系统的试题及解析。本套试题难度中等&#xff0c;题量不多&#xff0c;相关计算复杂程度不大&#xff0c;考察了状态方程以及电路模型和稳态响…

token的验证流程

前端 后台 1.1 登录接口(携带账号和密码(MD5)) -->到后台 需要&#xff1a; 验证(账号密码)生成Token(包含id昵称&#xff0c;不敏感的数据) 1.2 后台需要解析&#xff0c;-->然后在前端显示 解析(解析出前端需要显示的数据)把token放到某一个位置…

2023年Unity面试题大全,共十万字面试题总结【收藏一篇足够面试,持续更新】

&#x1f388;前言 为了方便大家可以重点复习某个模块&#xff0c;所以将各方面的知识点进行了拆分并更新整理了新的内容&#xff0c;并对之前的版本中有些模糊的地方进行了纠正。此篇文章为Unity所有面试题模块的目录导航文章&#xff0c;全网最全的 Unity 面试题 都在这里了…

6.2.7 简单邮件传送协议SMTP

6.2.7 简单邮件传送协议SMTP 我们从一个SMTP发送的示例来了解简单邮件传送协议SMTP。 例&#xff1a;在主机Alpha.ARPA上的Smith发送邮件给在主机Beta.ARPA 的Jones.Green和Brown的过程。这里我们假定主机Alpha直接联系主机Beta。 Sender-SMTP和Receiver-SMTP建立了传输信道…

Hive(27): join连接查询

1 join概念回顾 根据数据库的三范式设计要求和日常工作习惯来说,我们通常不会设计一张大表把所有类型的数据都放在一起,而是不同类型的数据设计不同的表存储。比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关…