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个或者其他完整数量的桶,而是当下桶接满了,才临时又拿新…

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)通过搜索引擎指定域名…

C++常用的区块代码

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

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

年已经过完了&#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中&…

罗德与施瓦茨联合广和通全面验证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;封装成帧和透…

Linux systemd详解

1、概念 1.1 systemd systemd 是一个用于管理 Linux 系统启动过程和系统服务的系统和服务管理器。它被设计为取代传统的 System V init 系统&#xff0c;提供了更快的启动时间、并行启动服务、更好的日志记录和更强大的管理功能。 1.2 unit Unit 是 systemd 中所有配置文件…

基于ssm校园美食交流系统论文

目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行性 10 3.1.3 操作可行性 10…

字符函数与字符串函数

目录 一.字符分类函数 二.字符转化函数 三.strlen函数 函数的介绍 strlen函数的模拟实现 1.计算器法 2.递归 三.指针-指针的方式 四.strcpy函数 函数介绍 strcmp的模拟实现 五.strcat函数 函数介绍 strcat的模拟实现 六.strcmp函数 函数介绍 返回值 strcm…

Mysql学习--深入探究索引和事务的重点要点与考点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

自动驾驶---Motion Planning之轨迹Path优化

1 背景 在之前的几篇文章中,不管是通过构建SL图《自动驾驶---Motion Planning之Path Boundary》,ST图《自动驾驶---Motion Planning之Speed Boundary》,又或者是构建SLT图《自动驾驶---Motion Planning之构建SLT Driving Corridor》,最终我们都是为了得到boundary的信息。 …

OpenCV实战:智能人脸识别打卡系统

1、介绍 目前&#xff0c;很多公司对员工的考勤同时通过打卡机或者钉钉之类的打卡软件&#xff0c;传统的员工打卡方式有很多&#xff0c;例如点名、签字、刷卡、指纹等等 然而随机机器视觉、计算机视觉的不断发展&#xff0c;算力的不断提升&#xff0c;人工智能对人脸检测的…

如何用联合(共用体)union验证系统大小端

一&#xff1a;思路 由联合体的特点&#xff0c;可知上图&#xff0c;char c 和 int i 共用四个字节&#xff0c;假设是小端&#xff0c;则由左到右是低地址到高地址&#xff0c;四个字节的内容如图所示01 00 00 00 代码展示&#xff1a; 如果第一个字节是1&#xff0c;则证明…

<Linux> 线程池

目录 前言&#xff1a; 一、线程池概念 &#xff08;一&#xff09;池化技术 &#xff08;二&#xff09;优点 &#xff08;三&#xff09;应用场景 二、线程池的实现 &#xff08;一&#xff09;线程池_V1&#xff08;朴素版&#xff09; &#xff08;二&#xff09;线…