mysql事务及存储引擎

目录

什么是事务

事务的ACIP特性

事务之间的影响

mysql隔离级别

事务隔离级别的作用范围

事务控制语句

mysql存储引擎


什么是事务

事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。

事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。

事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。

事务是通过事务的整体性以保证数据的一致性。

说白了,所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位,事务的存在可以确保数据操作的正确性和可靠性,保证数据在操作过程中,不会出现异常或错误 。


事务的ACIP特性

ACID,是指在可靠数据库管理系统中,事务应该具有的四个特性:原子性(Atomicity),一致性(Consistency),隔离性(lsolation),持久性(Durability),这是可靠数据库所应具备的特性

原子性:指事务是一个不可再分割的工作单位,事务中的操作要么发生,要么不发生。

事务是一个完整的操作,事务的各元素是不可分的,事务的所有元素必须作为一个整体提交或回滚,如果有一个环节出现问题,那么整个事务将失败

一致性:   事务执行前后,数据库从一个一致状态转换到另一个状态,保证数据的完整性和准确性。

当事务完成时,数据必须处于一致状态。在事务开始前,数据库中存储的数据处于一致状态。
在正在进行的事务中,数据可能处于不一致的状态。当事务成功完成时,数据必须再次回到已知的一致状态

隔离性:   多个并发事务相互隔离,互不干扰,每个事务独立执行,避免数据混乱和不一致

持久性:   一旦事务提交,其对数据库的修改是永久性的,即使系统发生故障或重启,修改的数据也不会消失。


事务之间的影响

脏读: 

当有两个事务在访问同一个数据时,一方对数据进行了修改,但最后选择了回滚(没有写入到数据库中),但另一方事务在他回滚前读到了这个被修改的数据,这就是脏数据。也就是脏读。

不可重复读:

一个事务两次相同的查询,返回的不同的数据,这是由于其他事务修改并提交所造成的。

幻读:

一个事务1在对表内容进行修改,而且是涉及到全表的,另一个事务2此时也对此表内容进行修改,并且在事务1之前提交了。此时,事务1修改完后,发现刚刚的更改对某些数据没起作用,这是事务2刚刚插进来的数据,让操作事务1的用户感觉很魔幻,出现了幻觉,也就是幻读。

丢失更新

两个事务同时读取同一条记录  事务1先修改记录,事务2也修改记录(2不知道1修改过),2提交数据后会覆盖掉1的修改记录。但这不是意味着事务1的操作失败了,事务1成功了,只是记录被事务2的记录覆盖掉了


mysql隔离级别

read uncommitted (安全性最差,但性能好 不使用)

read uncommitted:(读取尚未提交的数据)不解决脏读,允许脏读,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据

read committed  Oracle 数据库默认  安全性较差,性能较好) 

read committed:(提交读)读取已经提交的数据,可以解决脏读,只能读取已经提交的数据

repeatable read  mysql数据库默认  安全性较高,性能较差)

repeatable read:(可重复读)重复读取,可以解决脏读和不可重复读。无论其他事务是否修改并提交了数据,在这个事务内看到的数据始终不受其他事务影响

serializable  (安全性最高,性能最差  不使用)

serializable:(串行化)可以解决脏读,不可重复读,幻读。相当于锁表,完全串行化的读,每次读都需要获得表级共享锁,读写相互阻塞


事务隔离级别的作用范围

会话级:对当前的会话有效

全局级:对所有的会话有效

查询全局事务隔离级别

查询会话事务隔离级别

设置全局事务隔离级别

设置会话事务隔离级别


事务控制语句

begin 或 start transaction:显式地开启一个事务

commit 或 commit work:提交事务,并使已对数据库进行的所有修改变为永久性的

rollback 或 rollback work:回滚事务,撤销当前所有未提交的所有操作并结束事务

savepoint 回滚点名 :使用savepoint 允许在事务创建一个回滚点,一个事务可以创建多个回滚点

(回滚点只会存在当前事务中,事务结束,回滚点消失)

rollback to [savepoint] 回滚点名:把事务回滚到标记点

set autocommit = 0;           禁止自动提交

set autocommit=1;              开启自动提交,mysql默认1

show variables like  'autocommit'      查看mysql中的autocommit值

事务提交

事务回滚

设置回滚点

如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit , 当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。

如果开启了自动提交,mysql会把每个sql语句当作一个事务,然后自动的commit,当然无论开启与否,begin, commit|rollback 都是独立的事务。


mysql存储引擎

存储引擎介绍

MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎
存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式

mysql的常用存储引擎

Myisam

myisam不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的

myisam适合查询,插入为主的应用场景

myisam在磁盘上存储成三个文件,文件名和表名相同,但是扩展名分别为:

.frm    文件存储表结构的定义

.MYD(MYData)  数据文件的扩展名

.MYI(MYIndex)  索引文件的扩展名

表级锁定形式,数据在更新时锁定整个表
数据库在读写过程中相互阻塞: 串行操作,按照顺序操作,每次在读或写的时候会把全表锁起来
会在数据写入的过程阻塞用户数据的读取,也会在数据读取的过程中阻塞用户的数据写入
特性:数据单独写入或读取,速度过程较快且占用资源相对少

MyISAM 表支持 3 种不同的存储格式:

静态表(固定长度):静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。固定长度10,存储非常迅速,容器缓存,故障之后容易恢复

动态表 :动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难

压缩表 :压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

myisam:适合于单方向的任务场景、同时并发量不高、对于事务要求不高的场景


lnnoDB

lnnodb 支持事务,读写阻塞与事务的隔离级别有关,能搞笑的缓存索引和数据,表与主键以簇的方式存储,支持分区,表空间,支持外键约束,5.5版本后支持全文索引,对硬件资源要求还是比较高的场合,采用行级锁定,但在全表扫描时仍然是表级锁定

InnoDB 中不保存表的行数,如 select count(*) from table; 时,InnoDB 需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。需要注意的是,当 count(*)语句包含 where 条件时 MyISAM 也需要扫描整个表
对于自增长的字段,InnoDB 中必须包含只有该字段的索引

但是在 MyISAM 表中可以和其他字段一起建立组合索引,清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表(truncate)
 

mysql从5.5.5版本开始,默认的存储引擎为lnnodb

查看系统支持的存储引擎

show engines;

查看表使用的存储引擎

show table status from 库名 where name='表名'\G;(命令太长,不推荐使用)

show create table 表名;

修改存储引擎

alter table 表名 engine=引擎名;

创建表时指定引擎

修改配置文件,但需要重启mysql,对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。

vim /etc/my.cnf

修改此模块下的内容

[mysqld]

default-storage-engine=INNODB

systemctl restart mysqld

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

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

相关文章

AI预测福彩3D第15弹【2024年3月21日预测--第3套算法重新开始计算第4次测试】

今天咱们继续对第3套算法进行第4次测试,第3套算法加入了012路的权重。废话不多说了,直接上结果吧~ 最终,经过研判分析,2024年3月21日福彩3D的七码预测结果如下: 百位:4 5 7 1 0 6 2 十位:3 1 5 …

QML 布局管理器之GridLayout 项目demo

一.气体控制效果图 二.界面布局代码实现 //DottedLline.qml 虚线绘制 import QtQuick 2.12 import QtQuick.Shapes 1.12Shape {id:canvaswidth: parent.widthheight: parent.heightShapePath{strokeStyle: ShapePath.DashLinestartX: 8startY: 10dashPattern: [1, 3]PathLine{…

在Linux搭建Emlog博客结合内网穿透实现公网访问本地个人网站

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…

Flink入门知识点汇总(二)

具体内容请看b站尚硅谷课程! 32_Flink运行时架构_提交流程_Yarn应用模式_哔哩哔哩_bilibili 窗口 Flink的窗口并不是静态准备好的,而是动态创建的。数据流到达时不会准备24个或者其他完整数量的桶,而是当下桶接满了,才临时又拿新…

001-Windows下PyTorch极简开发环境配置(上)

本节介绍Windows系统下配置一套基于Pytorch框架的极简深度学习开发环境。 目录 0.1 缘起 0.1 缘起 其实大概在2016就开始接触深度学习的相关知识,但一直到2018年左右,还停留在门外汉的状态太,原因很简单,感觉学习的门槛过高。…

web前端之小功能聚集、简单交互效果

MENU 纯CSS实现可编辑文字霓虹灯闪烁效果css之实现流水文字、闪烁、荧光、炫酷web前端之文本擦除效果与下划线结合css之下划线动画 纯CSS实现可编辑文字霓虹灯闪烁效果 效果图 html <h1 contenteditable"true">Hello World</h1>style * {margin: 0;pa…

C/C++在线参考手册的使用技巧

cppreference.com是一个在线的C/C参考手册&#xff0c;是C/C学习者最常用的网站。 网址&#xff1a;cppreference.com 1&#xff0e;搜索 不知道为什么这个网站总是不能正常搜索&#xff0c;实在是太不方便了。 有两个退而求其次的方法&#xff1a; (1)通过搜索引擎指定域名…

无服务器推理在大语言模型中的未来

服务器无服务器推理的未来&#xff1a;大型语言模型 摘要 随着大型语言模型(LLM)如GPT-4和PaLM的进步&#xff0c;自然语言任务的能力得到了显著提升。LLM被广泛应用于聊天机器人、搜索引擎和编程助手等场景。然而&#xff0c;由于LLM对GPU和内存的巨大需求&#xff0c;其在规…

C++常用的区块代码

很多人在刷题时都遇到过不会的情况 这篇文章希望可以帮到你&#xff01; 1.输入n将这个数倒着输出来&#xff1a; while(n!0){tn%10;printf("%d",t);nn/10; }只要会这条代码&#xff0c;很多题目都可以直接秒杀。 如&#xff1a; 输入一个整数n,算出它各个位数的乘积…

【RPC研究】socket 函数调用

突然想深入学习一下RPC调用&#xff0c;研究一下发现这个东西相关联的东西还是比较多的&#xff0c;而且也算补齐一下别的知识。 接下来会写一下相关的知识&#xff0c;但没有什么参考资料基本都是博客看的&#xff0c;或者自己本科学的知识融合&#xff0c;并没有翻啥书&…

[Repo Git] manifests的写法

​manifests​​是个啥 在Repo​中manifests​描述了Repo客户端的结构&#xff0c;也就是可以从manifests​中知道各个模块的代码应该从代码管理仓库当中哪个位置去获取。 ​manifests​的基本结构是一个Git存储库&#xff0c;在顶层目录中持有一个default.xml​文件。 由于m…

程序员想要搞钱不迷茫,这篇文章你可得码好啦!!!

年已经过完了&#xff0c;现在大家都已经返工返校了吧&#xff01;咱又要投入到新一年的战斗了&#xff01;春色恼人不等闲&#xff0c;相信咱都有一个实实在在的愿望和期许&#xff1a;身体健康&#xff0c;财源广进&#xff01;新的一年我们还得继续努力&#xff0c;多多搞钱…

利用IP地址查防止电子招投标串标行为

随着信息技术的快速发展&#xff0c;电子招投标已成为政府和企业采购的主要方式。然而&#xff0c;电子招投标中的串标问题也愈发突出&#xff0c;给公平竞争和资源分配带来了隐患。为了防止串标行为&#xff0c;利用IP地址查已成为一种有效手段。 IP地址查询&#xff1a;IP数…

002_avoid_for_loop_in_Matlab避免使用for循环

避免使用for循环 在程序设计思想中&#xff0c;循环是一个很有力的工具。在循环中&#xff0c;计算机很轻松地重复执行相同的操作。循环是汇编之上的编程中最重要的概念之一。Matlab的循环有两个语言构造&#xff0c;一个是for循环&#xff0c;另一个是while循环。在Matlab中&…

Python实战:全局变量与局部变量

一、引言 在Python编程中&#xff0c;全局变量和局部变量是两种常见的变量类型&#xff0c;它们在代码的执行过程中扮演着重要的角色。理解全局变量和局部变量的概念、作用域和生命周期对于编写清晰、可维护的代码至关重要。本文将详细介绍Python中的全局变量与局部变量&#…

【Vue3笔记01】如何使用Vue3和Vite搭建前端项目的基础开发环境

这篇文章,主要介绍如何使用Vue3和Vite搭建前端项目的基础开发环境【知识星球】。 目录 一、搭建项目环境 1.1、前提条件 1.2、开始搭建 1.3、下载依赖

罗德与施瓦茨联合广和通全面验证RedCap模组FG132系列先进性能

近日&#xff0c;罗德与施瓦茨联合广和通完成Redcap(Reduce Capability)功能和性能验证。本次测试使用R&SCMX500 OBT(One Box Tester)无线通信测试仪&#xff0c;主要验证广和通RedCap模组FG132系列射频性能以及IP层吞吐量&#xff0c;包括RedCap上下行吞吐量和射频指标如矢…

【计算机网络篇】数据链路层(2)封装成帧和透明传输

文章目录 &#x1f95a;封装成帧和透明传输&#x1f388;封装成帧&#x1f388;透明传输&#x1f5d2;️面向字节的物理链路使用字节填充的方法实现透明传输。&#x1f5d2;️面向比特的物理链路使用比特填充的方法实现透明传输。 &#x1f6f8;练习 &#x1f95a;封装成帧和透…

css的transform详解

CSS的transform属性是一个功能强大的工具&#xff0c;允许你对HTML元素应用2D或3D转换效果&#xff0c;包括旋转、缩放、倾斜和移动等。以下是对transform属性中各种函数和参数的详细介绍&#xff1a; 2D转换函数&#xff1a; translate()&#xff1a;该函数用于移动元素。它接…

洛谷P8218 【深进1.例1】求区间和 【前缀和】【一阶差分】【二阶差分】

文章目录 前缀和前缀和例题题意 差分差分例题及code↓模版例题输入样例&#xff1a;输出样例&#xff1a; code↓ 前缀和 前缀和定义&#xff1a; 前缀和数组的第 i i i 位即为原数组 1 1 1 ~ i i i 位的和 原数组&#xff1a; 1 2 3 4 5 前缀和数组&#xff1…