SQL事务与存储引擎

news2025/1/17 23:25:31

索引回顾:

索引是一个排序的列表,包含字段的值和值所在行数据的物理地址

事务是一个机制,一个操作序列(一组操作命令),事务会把所有命令当做一个整体向系统提交或撤销操作,要么都执行,要么都不执行。

根据索引表查看字段所对应行数据的物理地址,直接访问物理地址上的数据;是一个排序的列表,可以对一个字段进行升序排序。(select语句要用where索引字段查找)加快查找速度,自动排序;更新耗费额外时间,更占内存。

事务ACID特性:

原子性:事务的基础,都当成一个整体

一致性:事务的目的,保证事务开始前后完整

隔离性:并发事务操作数据,保证事务有自己的独立空间(这里又涉及到了数据的一致性:脏读、幻读等)隔离级别:未提交读RU、提交读RC、可重复读RR、串行读Serializable(隔离级别越高,隔离强度越强,数据库效率越低)

持久性:事务提交之后,数据修改的结果会被永久保存,不能回滚。

操作命令:

Begin;

....

Commit;

Rollback;

Savepoint xx;

Rollback to xx;

show variables like 'autocommit'

set autocommit=0 关闭

存储引擎

 

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

存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式。

MySQL常用的存储引擎:MylSAM、InnoDB

MySQL数据库中的组件,负责执行实际的数据I/O操作

MySQL系统中,存储引擎处于文件系统之上,在数据保存导数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储。

 

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

访问速度快,对事务完整性没有要求

MyISAM适合查询、插入为主的应用

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

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

MyISAM的特点:

表级锁定形式,数据在更新时锁定整个表

数据库在读写中互相阻塞

  • 会在数据写入的过程阻塞用户数据的读取
  • 也会在数据读取的过程中阻塞用户的数据写入

数据单独写入或读取,速度过程较快切占用资源较少

MyISAM支持的存储格式

  • 静态表
  • 动态表
  • 压缩表

(1)静态(固定长度)表

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

(2)动态表

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

(3)压缩表

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

常用存储引擎:InnoDB、MyISAM

MyISAM:不支持事务和外键约束,占用资源较小,访问速度快,表级锁定,支持全文索引,适用于不需要事务处理,单独写入或查询的应用场景

InnoDB:支持事务处理、外键约束,缓存能力较好,支持行级锁定,读写能力较好,5.5版本后支持全文索引,适用于一致性要求高、数据更新频繁的应用场景。

MyISAM使用场景:

  • 公司业务不需要事务的支持
  • 单方面读取或写入数据比较多的业务
  • MyISAM存储引擎数据读写都比较频繁场景不适合
  • 使用读写并发访问相对较低业务
  • 数据修改相对较少业务
  • 对数据业务的一致性要求不是非常高的业务
  • 服务器硬件资源相对比较差

InnoDB特点:

  • 支持事务,支持4个事务隔离级别
  • MySQL从5.5.5版本开始,默认的存储引擎为InnoDB
  • 读写阻塞与事务隔离级别相关
  • 能非常高效的缓存索引和数据
  • 表与主键以簇的方式存储
  • 支持分区、表空间,类似Oracle数据库
  • 支持外键约束,5.5前不支持全文索引,5.5后支持全文索引
  • 对硬件支援要求还是比较高的场合
  • 行级锁定,但是全表扫描仍然会是表级锁定,如update table set a=1 where user like '%zhang%';(进行模糊查询的时候仍然会进行表级锁定)

InnoDB中部保存标的行数,如select count(*)from tale;时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。但是count(*)语句包含where条件时,MyISAM也会扫描整个表。

对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立组合索引

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

InnoDB使用场景

  • 业务需要事务支持
  • 行级锁定对高并发有很好的适应能力,但需确保查询是通过索引来完成的
  • 业务数据更新较为频繁的场景:论坛、微博等
  • 业务数据一致性要求较高:银行业务
  • 硬件设备内存较大,InnoDB较好的缓存能力来提高内存利用率,较少磁盘IO的压力

企业选择存储引擎依据

需要考虑每个存储引擎提供了那些不同的核心功能及应用场景

支持的字段和数据类型

  • 所以引擎都支持通用的数据类型
  • 但不是所有的引擎都支持其他的字段类型,如二进制对象

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

索引的支持

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

事务处理的支持

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

总结存储引擎:

InnoDB:支持事务、外检约束,支持行级锁定(在全表扫描时仍然是标记锁定),读写并发能力较好,在5.5版本后才支持全文索引,缓存能力较好减少磁盘IO的压力。数据和索引是在一个表中存储的。适用于一致性要求高,数据频繁更新,高并发读写的业务场景。

MyISAM:不支持事务、外键约束,只支持表级锁定,适合单独地查询或写入插入速度较快,读写并发能力较差,支持全文索引,占用资源较小适合硬件资源较差的服务器使用。数据文件和索引文件是分开存储的。适用于不需要事务处理,单独的写入或查询的业务场景。

修改存储引擎三种方法:

#查看一个表状态(可以查看表示用的存储引擎)

1)show table status from 库名 where name=‘表名'\G

2)show create table 表名;

#修改引擎

1)alter table member engine=MyISAM;

2)create table 表名 (...)  engine=MYISAM/InnoDB      #新建表时指定存储引擎

3)修改/etc/my.cnf文件,指定默认存储引擎并重启服务

[mysql]

default-storage-engine=MYISAM/InnoDB             #使用默认存储引擎新建表

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

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

相关文章

MySQL中的Join 的算法(NLJ、BNL、BKA)

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录 摘要什么是JoinIndex Nested-Loop JoinBlock Nested-Loop JoinMRR & BKA总结 摘要 Join是MySQL中最常见的查询操作之一,用于从多个表中获取数据并将它们组合在一起。Join算法通常使…

【概念大全(关系,码,选择,投影,连接,运算)】第二章 关系数据库

第二章 关系数据库 1. 关系的基本概念1. 什么是域2. 笛卡尔积3. 笛卡尔积中 有意义的子集 就是关系4. 候选码 (是唯一标识符 并不是用 只有一个进行判断)5. 全码(一行中都不重复)6. 主码(候选码选一个就是主码&#xf…

手术麻醉临床信息系统源码,实时自动采集麻醉和监护设备的数据

手术麻醉临床信息系统源码 手术麻醉临床信息系统实时采集麻醉和监护设备的数据,实现术前、术中、术后全手术过程的数字化管理,为手术室提供全数字化的业务管理、临床管理、费用管理、材料管理等。同时通过与 HIS、EMR、PACS、LIS 等系统无缝集成&#x…

Linux中信号的基础知识

信号的概念 Linux操作系统中,信号是一种进程间通信(Inter-Process Communication, IPC)机制,用于向其他进程发送通知或指示,通常是为了通知特定事件的发生,如程序终止、用户按下特定按键等。信号提供了一种…

java获取输入内容的方法

Java中的对象类型可以有多种,比如 Object、 StringBuilder等,其中 Object和 String是最常用的对象类型,而 StringBuilder类是一种特殊的类,它能通过继承来创建其他的对象。 我们在平时的工作中经常会遇到需要获取输入内容的情况&a…

界面控件DevExpress Blazor UI v22.2亮点:全新的Window组件

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具,该组件拥有众多新产品和数十个具有高影响力的功能,可为桌面、Web和移动应…

详解async 与 await,带您理解Playwright使用异步方法的正确姿势!

大家在使用python做playwright自动化测试的过程中,一定会发现下面这种异步用法 async def func():await apiawait api 很多同学可能只是按照这种写法来编写项目的自动化测试代码,对于具体细节可能并不了解,今天我就来讲一下playwright异步用…

基于fNIRS的脑功能连接分析:图论方法

导读 背景:fNIRS是一种利用近红外光谱进行功能神经成像的光学脑监测技术。它使用近红外光来测量大脑活动,并估计由于运动活动而引起的大脑皮层血流动力学活动。fNIRS通过光学吸收来测量含氧和脱氧血红蛋白中氧水平的变化。多源噪声和伪影干扰导致的信号…

【P6】JMeter HTTP Cookie管理器

文章目录 一、测试网站二、Cookie 设置规则2.1、无配置元件时,Cookie 不会自动设置(与线程组设置无关)2.2、有配置元件,不选任何参数时,Cookie 自动设置(与线程组设置无关)2.3、有配置元件&…

Java——二叉搜索树中第k小的元素

题目链接 leetcode在线oj题——二叉搜索树中第k小的元素 题目描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 题目示例 示例1 输入:root [3,1…

软件工程本科生毕业论文中常见问题总结

文章目录 目录结构不合理 绪论(引言)研究内容 表格表格首行不要加粗表格能不跨页的就不要跨页 其他常见格式问题专有名词要用统一写法 首先先仔细阅读: 本科生毕业论文(设计)写作与排版打印规范 目录 结构不合理 2.…

Ubuntu 增加swap交换内存

一、创建虚拟内存 在实际开发中发现swap交换分区不够用了,于是需要创建虚拟内存来增加交换分区的大小。 在系统空闲空间位置创建swap虚拟内存专用文件夹 cd /data //切到你想要创建交换分区的目录 mkdir swap //新建文件夹swap cd swap //进入swap文件夹 备…

Fastjson<1.2.48远程代码执行漏洞(CNVD-2019-22238)

漏洞存在原因 在fastjson<1.2.24版本中&#xff0c;在解析json的过程中&#xff0c;支持使用autoType来实例化某一个具体的类&#xff0c;并调用该类的set/get方法来访问属性。而在1.24<fastjson<1.2.48版本中后增加了反序列化白名单&#xff0c;而在1.2.48以前的版本…

【容器化应用程序设计和开发】2.4 容器网络和存储

往期回顾&#xff1a; 第一章&#xff1a;【云原生概念和技术】 第二章&#xff1a;2.1 容器化基础知识和Docker容器 第二章&#xff1a;2.2 Dockerfile 的编写和最佳实践 第二章&#xff1a;2.3 容器编排和Kubernetes调度 2.4 容器网络和存储 容器网络和存储是容器化应用…

操作系统第二章——进程与线程(下)

东风夜放花千树&#xff0c;更吹落&#xff0c;星如雨 文章目录 2.3.1 进程同步&#xff0c;进程互斥知识总览什么是进程同步什么是进程互斥知识回顾 2.3.2 进程互斥的软件实现方法知识总览如果没有进程互斥单标志法双标志先检查法双标志后检查法Peterson算法知识回顾 2.3.3进程…

Linkage Mapper解密数字世界链接 专栏内容介绍

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Linkage Mapper解密数字世界链接 在数字时代&#xff0c;链接是信息的核心&#xff0c;链接地…

typescript:熟练掌握typescript

一、简介 TypeScript 教程 | 菜鸟教程 TypeScript (简称:TS)是JavaScript的超集 (JS有的TS 都有)。 TypeScriptType JavaScript (在JS 基础之上&#xff0c;为JS添加了类型支持)。 哔哩哔哩_教程_TypeScript 二、TypeScript为什么要为js增加类型支持&#xff1f; 背景&am…

Flowable+React+bpmn-js实现工作流

由于新东家使用的是React&#xff0c;不是Vue&#xff0c;而自己一直想做一个关于工作流的应用出来&#xff0c;断断续续&#xff0c;花了几个月的时间&#xff0c;开发了工作流的功能&#xff0c;后面会继续完善。 技术栈 前端 前端是基于React开发的&#xff0c;使用了ant…

【LeetCode】704.二分查找

704.二分查找 解析&#xff1a; 思路一&#xff1a;暴力解法&#xff0c;直接遍历&#xff0c;从头开始查找&#xff0c;如果找到直接返回下标&#xff0c;找不到返回-1。 class Solution { public:int search(vector<int>& nums, int target) {for(int i 0; i <…

[架构之路-192]-《软考-系统分析师》-8-软件工程 - 14种UML图快速概览

目录 第1章 UML概述 1.1 什么是UML&#xff1f; 1.2 为什么要用UML&#xff1f; 1.3 UML图有哪些&#xff1f; 1.4 UML图概览 第2章 UML图示 2.1 静态图、结构图 - 什么是类图&#xff1f; 泛化&#xff08;Generalization&#xff09; 实现&#xff08;Realization&a…