Mysql事务及存储引擎

一、Mysql事务

  1.1 Mysql事务的概念

    所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

  1.2 事务的ACID特点

    事务应该具有的四个特性:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)

  • 原子性:指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性:指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
  • 隔离性:指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
  • 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

  1.3 事务的相互影响

  1. 脏读(读取未提交数据):脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并一定最终存在的数据
  2. 不可重复读(前后多次读取,数据内容不一致):一个事务内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。
  3. 幻读(前后多次读取,数据总量不一致):一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有没有修改的数据行,就好象发生了幻觉一样。
  4. 丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

二、mysql事务隔离级别

隔离级别含义特点
read uncommitted读取尚未提交的数据 :不解决脏读,允许脏读,其他事务只要修改了数未提交读安全性最差,但性能最好(不使用)
read committed提交读:读取已经提交的数据,可以解决脏读,只能读取到已经提交的数据
安全性较差 ,性能较好(Oracle数据库默认)
repeatable read可重复度,重读读取,可以解决脏读 和 不可重复读 —mysql默认的可重复读安全性较高,性能较差(mysql默认)
serializable串行化:可以解决脏读、不可重复读和虚读----相当于锁表;完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。安全性高,性能差(不使用)

  注意mysql默认的事务处理级别是repeatable read ,而OracleSQLServerread committed

  2.1 事务隔离级别的作用范围

  • 全局级:对所有的会话有效
  • 会话级:只对当前的会话有效

  2.1.1 查询全局事务隔离级别

show global variables like '%isolation%';


SELECT @@global.tx_isolation;

 

  2.1.2 查询会话事务隔离级别

方法一:show session variables like '%isolation%';


方法二:SELECT @@session.tx_isolation; 


方法三:SELECT @@tx_isolation;

  2.1.3 设置全局事务隔离级别

set global transaction isolation level read committed;

  2.1.4 设置会话事务隔离级别

set session transaction isolation level read committed; 

三、事务控制语句

事务控制语句含义
BEGIN 或 START TRANSACTION显式地开启一个事务
COMMIT 或 COMMIT WORK提交事务,并使已对数据库进行的所有修改变为永久性的
ROLLBACK 或 ROLLBACK WORK回滚会结束用户的事务,并撤销正在进行的所有未提交的修改
SAVEPOINT S1使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT。举例:S1代表回滚点名称
ROLLBACK TO [SAVEPOINT] S1把事务回滚到标记点

 

  3.1 实例操作

  3.1.1 创建数据库和表,并往里插入值

create database light;

use light;

方法一:create table baby(id int(10) primary key not null,name varchar(50) not null,monet char(10) not null);

方法二:create table baby(id int(10) not null,name varchar(50) not null,monet char(10) not null,primary key(id));

insert into baby values(1.'FIRST',500);

insert into baby values(2,'SECOND',700);

select * from baby;

   3.1.2 测试提交事务

begin

update baby set monet = monet - 50 where name = 'FIRST';

select * from baby;


quit

mysql -u root -p

use light;

select * from baby;

     在开始事务时,更新FIRST数据一切正常运行,退出

    退出后,重新查看数据表时,发现数据回到初始状态

  3.1.3 测试回滚事务

begin

update baby set monet= moent + 85 where name = 'FIRST';

select * from baby;

savepoint S1;

update baby set monet= moent + 15 where name = 'SECOND';

select * from baby;

savepoint S2;

insert into baby values(3,'SECOND'.600);

select * from baby;


ROLLBACK TO S1;


select * from baby;

 四、使用 set 设置控制事务

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将数据存储在文件系统中的存储方式或者存储格式

  5.1 MySQL常用的存储引擎

  • MyISAM
  • InnoDB

    MySQL数据库中的组件,负责执行实际的数据I/O操作。
    MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储。

  5.1.1 MyISAM  

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

    特点:访问速度快,对事务完整性没有要求
    应用场景:MyISAM 适合查询、插入为主
    MyISAM在磁盘上存储成三个文件,文件名和表名都相同,但是扩展名分别为:

  • 文件存储表结构.frm
  • 数据文件的扩展名为 .MYD (MYData)
  • 索引文件的扩展名是 .MYI (MYIndex)

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

    总结

  • MyIsam 是表级锁定,读或写无法同时进行
  • 优点:分开执行时,速度快、资源占用相对较少

  5.1.1.1 MyISAM 表支持 3 种不同的存储格式
存储格式含义优点缺点
静态(固定长度)表静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的
  • 存储非常迅速
  • 容易缓存
  • 出现故障容易恢复
占用空间多
动态表动态表包含可变字段(varchar),记录不是固定长度的,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能占用空间较少
  • 更新频繁
  • 删除较麻烦
  • 故障恢复相对困难
压缩表压缩表由 myisamchk 工具创建占据空间小

  5.1.1.2 MyISAM适用的生产场景

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

  5.1.2 InnoDB

  5.1.2.1 InnoDB特点
  1. 支持事务,支持4个事务隔离级别
  2. 读写阻塞与事务隔离级别相关
  3. 能非常高效的缓存索引和数据
  4. 表与主键以簇的方式存储
  5. 支持分区、表空间,类似oracle数据库
  6. 支持外键约束
  7. 对硬件资源要求还是比较高的场合
  8. 行级锁定,但是全表扫描仍然会是表级锁定

  

  5.1.2.2 InnoDB和MyISAM的区别

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

    但是在 MyISAM 表中可以和其他字段一起建立组合索引

    清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表

  5.1.2.3 死锁
  • MyISAM :表级锁定
  • innodb :行级锁定

  目的:当两个请求分别访问/读取2行记录,同时又需要读取对方的记录数据,因为(行锁的限制)而造成了阻塞的现象

  需求:怎么解决死锁?

  过程例如:

show

heihei_lei

select * from heihei_lei;

  5.1.2.3.1 MyISAM和innodb死锁的特点

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;


行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高; 

  MyISAM不支持事务,也不支持外键约束,只支持全文索引数据文件索引文件是分开保存的,需要考虑每个存储引擎提供了哪些不同的核心功能及应用场景 

  5.1.2.3.1.1 支持的字段和数据类型
  • 所有引擎都支持通用的数据类型
  • 但不是所有的引擎都支持其它的字段类型,如二进制对象
     
  5.1.2.3.1.2 锁定类型

    不同的存储引擎支持不同级别的锁定

  • 表锁定: MyISAM 支持
  • 行锁定: InnoDB 支持

  5.1.2.3.1.3 索引的支持
  • 建立索引在搜索和恢复数据库中的数据时能显著提高性能
  • 不同的存储引擎提供不同的制作索引的技术
  • 有些存储引擎根本不支持索引

  5.1.2.3.1.4 事务处理的支持
  • 提高在向表中更新和插入信息期间的可靠性    
  • 可根据企业业务是否要支持事务选择存储引擎innodb

  5.2 查看系统支持的存储引擎

show engines; 

  5.3 查看表使用的存储引擎

show table status from heihei where name='lei'\G;

    方法一 :

    方法二: 

show create table lei; 

  四、修改存储引擎

alter table lei engine = MYISAM;

show create table lei;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

knife4j/swagger救援第一现场

1、前方来报,测试环境springboot项目无法启动,现场如下: Error starting ApplicationContext. To display the auto-configuration report re-run your application with debug enabled. [ERROR] 2024-03-20 12:54:42,718 --main-- [org.spr…

layui框架实战案例(25):laydate中mark的数据后端生成

mark,自定义日期标记。该属性是对 calendar 属性的进一步延伸,灵活度更高。属性可批量设置多个日期标记,如: mark: {0-10-14: 生日, //每年每月的某一天0-0-10: 工资, // 每月 10 号2008-8-8: 开幕, // 指定的日期 }其中日期的格式…

如何在Linux系统使用Docker本地部署Halo网站并实现无公网IP远程访问

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可…

[Linux初阶]which-find-grep-wc-管道符命令

目录 一.which 二.find a.-name b.-size 三.grep 四.wc 五.管道符(|) 五.总结 一.which 语法格式: which [命令] Linux中的一个个命令,本体上就是一个个的二进制可执行程序(相当于windows中的.exe文件). 在Linux中,一切皆文件. which命令:用于查看指定命令的可执行…

恒创科技:服务器反应慢如何解决?

​  通常来说,访问者会在最初的几秒钟内决定是留在您的网站还是离开。如果页面加载时间超过五秒,访问者离开的可能性就会增加 90%。所以,作为站长们,必须减少服务器响应时间,以确保其网站加载速度更快。以下是减少网…

ceres-solver-1.14.0安装教程

引言 简单记录下安装ceres-solver-1.14.0的过程,简单了解。 1、下载安装包 wget ceres-solver.org/ceres-solver-1.14.0.tar.gz 2、安装依赖 sudo apt-get install -y cmake libgoogle-glog-dev libatlas-base-dev libsuitesparse-dev3、 cd ceres-solver-1.14…

【包远程安装运行】SpringBoot+Mysql+Vue实现的4S店保养与维修系统源码+运行视频+包运行+开发文档

今天发布的是一款由SpringBootVueMysql实现的4S店保养与维修后台管理系统,该系统共分为两个角色,具体的功能如下: 管理员功能:供应商管理、采购管理、品牌管理、维修报单管理、车型管理、配件管理、车辆信息管理、套餐管理、维修记…

力扣HOT100 - 11. 盛最多水的容器

解题思路&#xff1a; 双指针&#xff0c;从左右两边往内侧夹逼&#xff0c;遍历后得到最大值 class Solution {public int maxArea(int[] height) {int i 0, j height.length - 1, res 0;while(i < j) {res height[i] < height[j] ? Math.max(res, (j - i) * heig…

如何在Linux系统使用宝塔面板搭建Inis博客并发布至公网【内网穿透】

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

Paper Digest|基于在线聚类的自监督自蒸馏序列推荐模型

论文标题&#xff1a; Leave No One Behind: Online Self-Supervised Self-Distillation for Sequential Recommendation 作者姓名&#xff1a; 韦绍玮、吴郑伟、李欣、吴沁桐、张志强、周俊、顾立宏、顾进杰 组织单位&#xff1a; 蚂蚁集团 录用会议&#xff1a; WWW 2024 …

【计算机】——51单片机——持续更新

单片机是一种内部包含CPU、存储器和输入/输出接口等电路的集成电路&#xff08;IC芯片&#xff09; 单片机是单片微型计算机&#xff08;Single Chip Microcomputer&#xff09;的简称&#xff0c;用于控制领域&#xff0c;所以又称为微型控制器&#xff08;Microcontroller U…

STM32CubeMX 生成的代码框架解析 - 最小化工程篇(含FreeRTOS)

文章目录 前言1. 创建工程说明2. 目录结构介绍2.1 总目录2.2 Core文件夹2.3 Drive文件夹2.4 MKD-ARM2.5 Middlewares2.6 IDE配置文件 3. 重点文件介绍3.1 Core文件夹3.1.1 srcfreertos.cmain.cstm32l4xx_hal_msp.cstm32l4xx_it.csystem_stm32l4xx.c 3.1. 2 includeFreeRTOSConf…

java 高级面试题(借鉴)(下)

雪花算法原理 第1位符号位固定为0&#xff0c;41位时间戳&#xff0c;10位workId&#xff0c;12位序列号&#xff0c;位数可以有不同实现。 优点&#xff1a;每个毫秒值包含的ID值很多&#xff0c;不够可以变动位数来增加&#xff0c;性能佳&#xff08;依赖workId的实现…

挺后悔,我敷衍地回答了“程序员如何提升抽象思维“

分享是最有效的学习方式。 博客&#xff1a;https://blog.ktdaddy.com/ 大家好&#xff0c;我是老猫。 大概在月初的时候&#xff0c;我发了一篇文章【当程序员之后&#xff1f;(真心话)】,在这篇文章中&#xff0c;提及了抽象思维对一名程序员的重要性。可能说得也比较笼统&a…

UML 类关系表示

类之间关系&#xff1a;依赖、泛化&#xff08;继承&#xff09;、实现、关联、聚合与组合 类与类、类与接口之间的关系表示&#xff1a; 纵向关系&#xff1a;继承、实现 横向关系&#xff1a;依赖、关联、聚合与组合&#xff0c;从强到弱依次为&#xff1a;组合、聚合、关联…

文献学习-22-Surgical-VQLA:具有门控视觉语言嵌入的转换器,用于机器人手术中的视觉问题本地化回答

Authors: Long Bai1† , Mobarakol Islam2† , Lalithkumar Seenivasan3 and Hongliang Ren1,3,4∗ , Senior Member, IEEE Source: 2023 IEEE International Conference on Robotics and Automation (ICRA 2023) May 29 - June 2, 2023. London, UK Abstract: 尽管有计算机辅…

反沙箱思路总结

文章目录 反调试反沙箱时间对抗环境检测 反虚拟机黑DLL父进程检测傀儡进程后记 反调试 IsDebuggerPresent #include<windows.h> #include<stdio.h> BOOL check() {return IsDebuggerPresent(); } BOOL isPrime(long long number){if (number < 1)return FALSE…

水下蓝牙耳机哪个好?必看4款购买单,拒绝踩雷!

在当今的科技时代&#xff0c;无线蓝牙耳机已经成为了我们生活中不可或缺的一部分。无论是运动、工作还是休闲娱乐&#xff0c;一款好的蓝牙耳机都能为我们带来极大的便利和乐趣。然而&#xff0c;在水下使用蓝牙耳机却是一个相对特殊的应用场景&#xff0c;需要考虑到防水、防…

关系(一)利用python绘制散点图

关系&#xff08;一&#xff09;利用python绘制散点图 散点图 &#xff08;Scatterplot&#xff09;简介 在笛卡尔座标上放置一系列的数据点&#xff0c;检测两个变量之间的关系&#xff0c;这就是散点图。 散点图可以了解数据之间的各种相关性&#xff0c;如正比、反比、无相…

[linux]--关于进程概念(下)

目录 孤儿进程 环境变量 将程序放到PATH路径下 设置PATH环境变量 设置别名 环境变量相关的命令 环境变量的组织方式​编辑 通过系统调用获取环境变量 环境变量通常是具有全局属性的 进程优先级 查看系统进程 用top命令更改已存在进程的nice&#xff1a; 程序地址空…