Mysql(4事务及存储)

目录

一.事务

事务的 ACID 特性:

一致性问题:

隔离级别:

查看隔离级别:

​编辑

设置隔离级别:

事务管理操作:

看下未提交读隔离的现象:

​编辑

看下提交读隔离的现象:

看下可重复度隔离的现象:

设置回滚点:

 自动提交事务:

二.存储引擎

MyISAM 与 InnoDB 的区别?

查看表的存储引擎:

查看系统支持的存储引擎

针对已存在的表修改存储引擎

建表时指定存储引擎

设置新建表的默认存储引擎:

死锁:

如何避免死锁?


一.事务

事务就是一组数据库操作序列(包含一个或者多个SQL操作命令),事务会把所有操作看作是一个不可分割的整体向数据库系统提交或撤消操作,所有操作要么都执行,要么都不执行。

事务的 ACID 特性:

原子性、一致性、隔离性、持久性

原子性:事务管理的基础。把事务中的所有操作看作是一个不可分割的工作单元,要么都执行,要么都不执行。

一致性:事务管理的目的。保证事务开始前和事务结束后数据的完整和一致

隔离性:事务管理的手段。使多个事务并发操作同一个表数据时,每个事务都有各自独立的数据空间,事务的执行不会受到其它事务的干扰。可通过设置隔离级别解决不同的一致性问题。

持久性:事务管理的结果。当事务被提交以后,事务中的命令操作修改的结果会被持久保存,且不会被回滚。

一致性问题:

脏读,不可重复读,幻读,丢失更新。

脏读:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。

幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。

丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录,B提交数据后B的修改结果覆盖了A的修改结果

隔离级别:

未提交读  read uncommitted   允许 脏读 不可重复读  幻读
提交读    read committed     不允许 脏读,允许 不可重复读  幻读
可重复度  repeatable read    不允许 脏读 不可重复读,有条件的允许 幻读(InnoDB存储引擎可以不允许)
串行读    Serializable       都不允许,相当于表级锁定,但是会影响数据库的读写效率和性能

查看隔离级别:

查看全局的隔离级别

show global variables like '%isolation%';

查看当前会话的隔离级别
show session variables like '%isolation%';

设置隔离级别:

全局级别的设置,可在所有会话有效,需要重新登录才可生效

set global transaction isolation level 隔离级别名称; 

会话级别的设置,在当前会话会话中立即生效

set session transaction isolation level 隔离级别名称;  

事务管理操作:

begin;   开启一个事务

savepoint 自定义名字;   在事务中创建回滚点

rollback to 自定义名字;    在事务中回滚操作到指定的回滚点位置

commit; 或 rollback;    提交或回滚结束事务

看下未提交读隔离的现象:

给表添加内容:

看会话1:

看会话2:

会话2能看到会话1修改未保存的数据。

给会话1增加结束操作:

看下提交读隔离的现象:

将隔离级别设为提交读

看会话1:

看会话2:

会话2看不到会话1修改未保存的数据。

当会话1保存结束修改后,查看会话2:

会话2在没有结束可以直接查看结果:

看下可重复度隔离的现象:

看下会话1:

看下会话2:

看不到会话1的修改为保存的数据。

结束会话1并在会话2查看表:

设置回滚点:

我想回滚到s1的数据:

回滚到s2,就不行了:

如果回滚到第一个回滚点,后面设置的回滚点就回不到了。

 自动提交事务:

查看提交事务是否开启:

show  [global/session]  variables like 'autocommit';

设置提交事务:set [global/session]  autocommit = 0/1;        0关闭自动提交,1开启自动提交

修改aaa表中的内容:

退出数据库重新进入:

二.存储引擎

存储引擎是MySQL数据库中的组件,负责执行实际的数据I/O操作。工作在文件系统之上,数据库的数据会先传到存储引擎,再按照存储引擎的存储格式保存到文件系统。

常用的存储引擎:InnoDB   MyISAM

MyISAM 与 InnoDB 的区别?

MyISAM:不支持事务、外键约束,只支持表级锁定,适合单独的查询和插入的操作,读写会相互阻塞,支持全文索引,硬件资源占用较小,数据文件和索引文件是分开存储的(存储成三个文件:表结构文件.frm、数据文件.MYD、索引文件.MYI)
使用场景:适用于不需要事务支持,单独的查询或插入数据的业务场景

InnoDB:支持事务、外键约束,支持行级锁定(在全表扫描时仍然会表级锁定),读写并发能力较好,支持全文索引(5.5版本之后),缓存能力较好可以减少磁盘IO的压力,数据文件也是索引文件(存储成两个文件:表结构文件.frm、数据文件.ibd)
使用场景:适用于需要事务的支持,一致性要求较高,数据会频繁更新,读写并发高的业务场景

查看表的存储引擎:

show create table 表名;

show table status [from 库名] where name='表名'\G

查看系统支持的存储引擎

show engines;

针对已存在的表修改存储引擎

alter table 表名 engine=InnoDB/MyISAM; 

查看下aaa表的存储引擎:

建表时指定存储引擎

create table 表名 (....) engine=InnoDB/MyISAM; 

设置新建表的默认存储引擎:

修改配置文件:

死锁:

死锁是指两个或多个事务在同一个资源上相互占用,并请求对方的锁定资源,从而导致恶心循环的现象。

锁定记录:delete from 表名 where (条件);
进行测试一下:

会话2,连接超时:

如何避免死锁?

设置事务超时等待时间 innodb_lock_wait_timeout
设置开启死锁检测 innodb_deadlock_detect
为表添加合理的索引,减少表锁发生的概率
如果业务允许,可以降低隔离级别,比如采用 提交读 隔离级别
建议开发人员尽量使用更合理的业务逻辑,多表操作时以固定顺序访问表,尽量避免同时锁定多个资源
建议开发人员尽量保持事务简短,减少对资源的占用时间和占用范围
建议开发人员在读多写少的场景下适用乐观锁机制
 

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

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

相关文章

如何禁用USB接口?这些方法你都可以试试

如何禁用USB接口 禁用USB接口可以通过操作系统设置或者使用一些硬件设备。 1. 通过操作系统禁用 通过操作系统禁用USB接口,是比较简单的操作,对电脑的损害也是比较小的。下面就一起来看一看,在不同的操作系统如何禁用USB。Windows系统&…

右值引用和移动语义以及C++11新增的类功能

正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 右值引用和左值引用 传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特…

【华为OD机试真题2023CD卷 JAVAJS】执行任务赚积分

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 执行任务赚积分 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间…

Java多线程技术五——单例模式与多线程-备份

1 概述 本章的知识点非常重要。在单例模式与多线程技术相结合的过程中,我们能发现很多以前从未考虑过的问题。这些不良的程序设计如果应用在商业项目中将会带来非常大的麻烦。本章的案例也充分说明,线程与某些技术相结合中,我们要考虑的事情会…

iconify图标集离线使用方案简介

1.需求描述 前端项目,技术栈使用Vue3Element Plus,参考了ruoyi-vue-pro项目与vue-element-plus-admin项目,封装了一个Icon组件,图标使用的是iconify,项目部署在内网环境,不能连接互联网,需要部署一套iconi…

《LeetCode力扣练习》代码随想录——栈与队列(用栈实现队列---Java)

《LeetCode力扣练习》代码随想录——栈与队列&#xff08;用栈实现队列—Java&#xff09; 刷题思路来源于 代码随想录 232. 用栈实现队列 没有算法 class MyQueue {private Stack<Integer> stackIn;private Stack<Integer> stackOut;public MyQueue() {stackInnew…

Docker基本命令和Docker怎么自己制作镜像

基本命令 启动新的容器&#xff08;指定容器名称和端口映射【主机端口&#xff1a;容器端口】) docker run --name 容器名 -p 8080:80 镜像名 启动新的容器&#xff08;交互式&#xff09; docker run -it centos7-with-jdk /bin/bash 特权方式启动容器 docker run -d --…

After Effects 2021 for Mac(AE 2021)

After Effects 2021是一款由Adobe公司开发的视频特效和动态图形制作软件&#xff0c;它主要用于电影、电视和网络视频的后期制作。该软件可以帮助用户创建各种令人惊叹的视觉效果&#xff0c;包括动态图形、文字特效、粒子系统、3D渲染等。 After Effects 2021提供了数百种特效…

文心一言 VS 讯飞星火 VS chatgpt (165)-- 算法导论13.1 5题

五、用go语言&#xff0c;证明&#xff1a;在一棵红黑树中&#xff0c;从某结点 x 到其后代叶结点的所有简单路径中&#xff0c;最长的一条至多是最短一条的 2 倍。 文心一言&#xff1a; 首先&#xff0c;我们要理解红黑树的性质。红黑树是一种自平衡的二叉查找树&#xff0…

天锐绿盾加密软件 | 数据保护 | 防泄密软件 \ 透明加密系统

天锐绿盾数据保护方案是一种全面的数据安全解决方案&#xff0c;旨在保护企业的电子文档和数据不被非法访问或泄露。 PC端访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天锐绿盾数据保护方案的主要功能和特点&…

【Python】FastAPI学习记录(二)

模型&#xff0c;请求数据 使用记录模型响应模型减少代码量任意 dict 构成的响应 请求附加信息Header信息 其他的请求信息表单数据文件数据基本使用多文件 表单文件 使用记录 模型 响应模型 有的时候一个post接口&#xff0c;请求模型和响应模型我们需要的字段是不一样的&am…

鹅目标检测数据集VOC格式350张

鹅是一种大型的水禽&#xff0c;常见于湖泊、河流和农田周围。它们的体形庞大&#xff0c;长有长颈和宽阔的翅膀&#xff0c;通常呈灰白色或棕褐色。鹅的头部呈黑色&#xff0c;嘴呈橙色&#xff0c;眼睛则是明亮的蓝色。 鹅是非常社交的动物&#xff0c;常以大群的形式生活在…

Jtti 香港服务器使用RAID技术的优势

RAID(冗余磁盘阵列)技术在服务器中的应用为数据存储提供了冗余、性能优化和容错能力。在香港服务器中使用RAID技术可以带来一些优势&#xff1a; 数据冗余&#xff1a; RAID 提供了数据冗余功能&#xff0c;通过在多个磁盘上存储相同的数据&#xff0c;使得即使其中一个磁盘发生…

DevC++ easyx实现视口编辑,在超过屏幕大小的地图上画点,与解决刮刮乐bug效果中理解C语言指针的意义

继上篇文案&#xff0c; DevC easyx实现地图拖动&#xff0c;超过屏幕大小的巨大地图的局部显示在屏幕的方法——用悬浮窗的原理来的实现一个视口-CSDN博客 实现了大地图拖动&#xff0c;但是当时野心不止&#xff0c;就想着一气能搓啥就继续搓啥&#xff0c;看着地图移动都搓…

树莓派,mediapipe,Picamera2利用舵机云台追踪人手(PID控制)

一、项目目标 追踪人手大拇指指尖&#xff1a; 当人手移动时&#xff0c;摄像头通过控制两个伺服电机&#xff08;分别是偏航和俯仰&#xff09;把大拇指指尖放到视界的中心位置&#xff0c;本文采用了PID控制伺服电机 Mediapipe Hand简介 MediaPipe 手部标志任务可检测图像…

windows搭建MySQL主从补充说明

这3种情况是在HA切换时&#xff0c;由于是异步复制&#xff0c;且sync_binlog0&#xff0c;会造成一小部分binlog没接收完导致同步报错。 第一种&#xff1a;在master上删除一条记录&#xff0c;而slave上找不到。 第二种&#xff1a;主键重复。在slave已经有该记录&#xff…

Kotlin 数据类

1、语法 data 修饰的类 data class User(val name: String, val age: Int) 编译器自动从主构造函数中声明的所有属性导出以下成员&#xff1a; .equals()/.hashCode() 对.toString() 格式是 "User(nameJohn, age42)".componentN() 按声明顺序对应于所有属性.cop…

链接世界与中国时尚文化,积萨伯爵国际时尚品牌在中国大放异彩

时尚的历史是一部文化发展的历史。从中国古代到现代西方&#xff0c;每个时代的时尚都有其独特的文化背景和历史意义。自丝绸之路开启了古代中国与罗马帝国之间的贸易&#xff0c;时尚的不断创新和变革&#xff0c;是文化变迁和时代精神的反映。时尚的变化&#xff0c;也引领着…

【Jmeter】Jmeter基础9-BeanShell介绍

3、BeanShell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法。 3.1、Jmeter中使用的BeanShell 在Jmeter中&#xff0c;除了配置元件&#xff0c;其他类型的元件中都有BeanShell。BeanShell 是一种完全符合Java语法规范的脚本语言,并且又拥…

Prompt 提示工程学习笔记

一、Prompt设计的四个关键要素&#xff1a; 任务描述、输入数据、上下文信息、提示风格 &#xff08;1&#xff09;任务描述&#xff1a;描述想要让LLM遵循的指令。描述应详细清晰&#xff0c;可进一步使用关键词突出特殊设置&#xff0c;从而更好地指导LLM工作。 &#xff0…