MySQL存储引擎、事务、索引 | 老杜

news2025/2/26 22:29:11

目录

一、存储引擎

1、什么是存储引擎

2、怎么设存储引擎

3、常用存储引擎

MyISAM存储引擎

InnoDB存储引擎

MEMORY存储引擎

二、事务

1、什么是事务

2、怎么做到同时成功同时失败

3、怎么提交和回滚呢

4、事务4个特性

A:原子性

C:一致性

I:隔离性

D:持久性

5、事务的隔离级别

三、索引

1、什么是索引

2、索引实现原理

3、什么时候用索引

4、索引失效

第一种

第二种

第三种

第四种

第五种


一、存储引擎

1、什么是存储引擎

存储引擎就是一个表存储数据的方式,不同的存储引擎,存储数据的方式不同

2、怎么设存储引擎

可以在建表的时候,给表指定存储引擎(小括号的后面用 ENGINE 指定存储引擎)

mysql默认的存储引擎是 innoDB 

3、常用存储引擎

MyISAM存储引擎

它管理的表具有以下特征:

使用三个文件表示每个表:

  • 格式文件 - 存储表结构的定义 (mytable.frm)
  • 数据文件 - 存储表行的内容 (mytable.MYD)
  • 索引文件 - 存储表上索引 (mytable.MYI)InnoDB存储引擎

特点:

  • 因为都存储在文件,可被转换为压缩、只读表来节省空间,这是这种存储引擎的优势!
  • 不支持事务

InnoDB存储引擎

这是mysql默认的存储引擎,也是重量级的存储引擎,支持事务,支持数据库崩溃后自动恢复机制,特点是安全

MEMORY存储引擎

内存存储引擎,且长度固定,所以特点是非常快,但是一断电就消失,数据和索引都存在内存

查询效率是最高的,但是不安全

二、事务

1、什么是事务

一个事务就是一个完整的业务逻辑

(比如转账,A向B转100,A账户减去100(update语句),B账户加100(update语句),这就是完整的业务逻辑)

上面的两个update语句必须同时成功或者同时失败

只有DML语句才和事务有关系,只有对数据进行增删改才要和事务有关系

2、怎么做到同时成功同时失败

InnoDB存储引擎: 提供一组用来记录事务性活动的日志文件事务开启了:
insert
insert
insert
delete
update
update
update事务结束了 !
在事务的执行过程中,每一条DMM的操作都会记录到“事务性活动的日志文件”中在事务的执行过程中,我们可以提交事务,也可以回滚事务。
提交事务?
清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中提交事务标志着,事务的结束。并且是一种全部成功的结束。
回滚事务?
将之前所有的DM操作全部撤销,并且清空事务性活动的日志文件回滚事务标志着,事务的结束。并且是一种全部失败的结束。

3、怎么提交和回滚呢

提交事务:commit

回滚事务:rollback(回滚永远只能回滚到上一次的提交点)

mysql默认情况下支持事务自动提交,没执行一条DML语句,则提交一次!

这种自动提交实际上是不符合我们的开发要求的,因为业务通常需要多条DML同时执行才能完成,为了保证数据安全,必须同时成功或者同时失败,所以不能执行一条提交一条

怎么把自动提交关闭呢?

start transaction;

4、事务4个特性

A:原子性

说明事务是最小的工作单元,不可再分

C:一致性

同一个事务中,所有的操作必须同时成功或同时失败,保证数据的一致性

I:隔离性

A事务和B事务之间具有一定的隔离。A事务操作一张表的时候,B事务也操作这种表会怎么样

D:持久性

事务最终结束的一个保障,事务提交,就相当于将没有保存到硬盘上的数据保存到硬盘上

5、事务的隔离级别

  • 读未提交(read uncommitted,指一个事务还没提交时,它做的变更就能被其他事务看到;事务A可以读取到事务B还没提交的数据,这种隔离级别就会存在脏读现象
  • 读提交(read committed,指一个事务提交之后,它做的变更才能被其他事务看到;事务A只能读取到事务B提交后的数据,解决了脏读现象,存在不可重复读取数据(第一次读到的和第二次再读取的是不同的,第一次3条,第二次读到4条)
  • 可重复读(repeatable read,指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别;可能会出现幻读,每次读到的数据都是幻想,不够真实,永远读取到的都是刚开启事务时的数据,只要事务不结束,就一直是那个数据
  • 序列化/串行化(serializable );会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;事务只能一个个排队执行,不能并发,效率低

按隔离水平高低排序如下:

图片

三、索引

1、什么是索引

在数据库表的字段上添加的,是为了提高查询效率存在的一种机制

一张表的一个字段可以添加一个索引,当然,多个字段联合起来也可以添加索引

索引相当于一本书的目录,是为了缩小扫描范围而存在的一种机制

2、索引实现原理

在任何数据库当中主键id自动添加索引对象,如果有unique约束的话,也会自动创建索引 

在任何数据库当中,任何一张表的任何一条记录在硬盘存储上都有一个硬盘的物理存储编号。

在mysql当中,索引是一个单独的对象,不同的存储引擎以不同的形式存在,在MyISAM存储引擎中,索引存储在一个.MYI文件中。在InoDB存储引擎中索引存储在一个逻辑名称叫做tablespace的当中。在MEMORY存储引擎当中索引被存储在内存当中。不管索引存储在哪里,索引在mysql当中都是一个树的形式存在。(自平衡二又树: B-Tree)

3、什么时候用索引

在mysq1当中,主键上,以及unique字段上都会自动添加索引的!!!!

什么条件下,我们会考虑给字段添加索引呢?

  • 条件1: 数据量庞大(到底有多么庞大算庞大,这个需要测试,因为每一个硬件环境不同)
  • 条件2:该字段经常出现在where的后面,以条件的形式存在,也就是说这个字段总是被扫描
  • 条件3:该字段很少的DML(insert delete update)操作。 (因为DML之后,索引需要重新排序建议不要随意添加索引,因为索引也是需要维护的,太多的话反而会降低系统的性能。

建议通过主键查询,建议通过unique约束的字段进行查询,效率是比较高的。

4、索引失效

第一种

因为在查找的时候必须知道第一个是啥,才能进行比对,%的话不知道第一个是啥,索引直接废了

第二种

这种时候建议使用union联合查询,先查出一个有索引的再查出没有索引的,这样分开查询,起码能走一个索引,用or两个都失效

第三种

复合索引,给两个字段加索引,查左边的走索引,查右边的失效

第四种

这个字段添加了索引,但是参加了运算,也会失效

第五种

在where中索引列使用了函数

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

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

相关文章

适用于媒体行业的管理数据解决方案—— StorageGRID Webscale

主要优势 1、降低媒体存储库的复杂性 • 借助真正的全局命名空间在全球范围内存储数据并在本地进行访问。 • 实施纠删编码和远程复制策略。 • 通过单一管理平台管理策略和监控存储。 2、优化媒体工作流 • 确认内容在合适的时间处于合适的位置。 • 支持应用程序直接通过 A…

研报精选230215

目录 【行业230215开源证券】电力设备行业投资策略:特高压建设有望迎来高峰期,解决清洁能源跨区互济瓶颈【行业230215浙商证券】计算机行业【AIGC算力时代系列报告】:ChatGPT研究框架【个股230215国信证券_公牛集团】民用电工行业领军者&…

SpringBoot08:Shiro

什么是Shiro? 一个Java的安全(权限)框架,可以完成认证、授权、加密、会话管理、Web集成、缓存等 下载地址:Apache Shiro | Simple. Java. Security. 快速启动 先在官网找到入门案例:shiro/samples/quick…

leaflet 鼠标点击弹出popup,显示明星名片(068)

第068个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中显示名人信息,这里给marker绑定popup,同时给每一个icon设定不同的图片。bindPopup(popup) 开始时不显示弹出框。而bindPopup(popup) .openOn(this.map); 开始时候会弹出一个pop 直接复制下面的 vue+leaf…

不可错过的SQL优化干货分享-sql优化、索引使用

本文是向大家介绍在sql调优的几个操作步骤,它能够在日常遇到慢sql时有分析优化思路,能够让开发者更好的了解sql执行的顺序和原理。一、前言在日常开发中,我们经常遇到一些数据库相关的问题,比方说:SQL已经走了索引了&a…

java的双亲委派模型-附源码分析

1、类加载器 1.1 类加载的概念 要了解双亲委派模型,首先我们需要知道java的类加载器。所谓类加载器就是通过一个类的全限定名来获取描述此类的二进制字节流,然后把这个字节流加载到虚拟机中,获取响应的java.lang.Class类的一个实例。我们把实…

边界层气象学期末复习笔记

边界层气象学期末复习笔记 什么是边界层 广义上的边界层是:气体流动于平板上方,平板表面的摩擦力和垂直速度切变产生的流体内摩擦力阻滞了固体边界处的气体流动,这样一个流速减少,并低于自由气流速度的区域称为边界层 在厚度较少…

uniapp ios证书申请和上架全流程

目前市场上流行着很多多端开发框架,就拿uniapp和react native来比较,uniapp比react native方便很多,react的编译还需要mac电脑,而uniapp则轻量得多,一台windows电脑就可以打包所有端的应用,包括ios版本。 …

nginx隐藏服务器信息以及修改服务器名称

网络安全日益受到关注。尽可能的隐藏信息,是公认的较为安全的做法。 nginx在默认情况下会输出服务软件名+版本号。 在nginx配置文件中添加如下: server_tokens off; 此项设置,可以屏蔽nginx输出版本号。 类似输出如下图: 由上图可见,仅输出了nginx名称。 如果想要修…

SAP S/4HANA 概述

智能企业业务技术平台Business Technology Platform提供数据管理和分析,并支持应用程序开发和集成。它还允许我们的客户使用人工智能、机器学习和物联网等智能技术来推动创新。业务网络Business network帮助客户实现跨公司业务流程的数字化。该网络建立在我们的采购…

Java基础面试题——JavaWeb专题

文章目录1.HTTP响应码有哪些2.Forward和Redirect的区别?3.Get和Post请求的区别4.介绍下OSI七层和TCP/IP四层的关系5.说说TCP和UDP的区别6. 说下HTTP和HTTPS的区别7.说下HTTP、TCP、Socket的关系是什么?8. 说下HTTP的长链接和短连接的区别9.TCP原理10. Co…

Kotlin 28. Kotlin 如何通过 TransitionDrawable 显示颜色渐变效果

Kotlin 如何通过 TransitionDrawable 显示颜色渐变效果 这里,我们通过 TransitionDrawable 显示颜色渐变效果,包括背景颜色的变化,以及图片与图片的渐变效果。 文章目录Kotlin 如何通过 TransitionDrawable 显示颜色渐变效果1 导入需要渐变的…

编译DPDK出现[-Werror=implicit-fallthrough=]错误

我使用ubuntu20.04版本,gcc-7编译dpdk-19.08版本 错误如下: 同样的问题,可以先看一下这篇文章 https://blog.csdn.net/weixin_44260459/article/details/123563091 可以看出[-Werrorimplicit-fallthrough]错误 是由于makefie 的CLFAGS中设…

【C++、数据结构】封装unordered_map和unordered_set(用哈希桶实现)

文章目录📖 前言1. 复用同一个哈希桶⚡1.1 🌀修改后结点的定义1.2 🌀两个容器各自模板参数类型:2. 改造之后的哈希桶⛳3. 哈希桶的迭代器🔥3.1 💥哈希桶的begin()和 end(…

Python自动化测试实战篇(5)优化selenium+unittest+ddt,搞定100条测试用例只执行前50条

这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求&…

【PyQt】树形控件QTreeWidget的复选框实现自动部分选择/半选择状态

为实现如下效果,搜索未得,自己总结。1 效果2 代码以下非完整代码,仅作演示用。2.1 引入包from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QMainWindow, QApplication, QTreeWidgetItem from PyQt5.uic import loadUi import sys2.…

基于zookeeper的Hadoop集群搭建详细步骤

目录 一、一些基本概念 二、集群配置图 三、Hadoop高可用集群配置步骤 1.在第一台虚拟机解压hadoop-3.1.3.tar.gz到/opt/soft/目录 2.修改文件名、属主和属组 3.配置windows四台虚拟机的ip映射 4.修改hadoop配置文件 (1)hadoop-env.sh (2)workers (3)crore-site.xml …

微信小程序+gatewayworker+php+tp框架开发,websocke即时通讯

为了做小程序的即时通讯功能,查了一些资料和视频,记录一下。 gatewayworker在tp框架的安装 下载地址:https://www.workerman.net/doc/gateway-worker/ 由于我先是在本地电脑上做开发的,所以下载的windows的demo 解压之后&#xf…

IPv6的基础配置以及实战案例

IPv6基本配置配置IPv6静态路由[Huawei] ipv6 route-static dest-ipv6-address prefix-length { interface-type interface-number [ nexthop-ipv6-address ] | nexthop-ipv6-address } [ preference preference ]查看接口的IPv6信息[Huawei] display ipv6 interface [ interfac…

Keras实例教程(7)之构建模型的第三种方式

多年以前,在TensorFlow中搭建深度学习模型对于很多人来说其实仍然是比较困难的。相比之下,Keras作为独立于TensorFlow的一种深度学习框架则要简单很多。在TensorFlow与PyTorch的竞争中逐渐式微的情况下,TensorFlow团队终于宣布Keras将成为在tensorflow2.0中构建和训练模型的…