MySQL简介及常用引擎介绍

news2024/11/18 1:29:01

MySQL 由 My 和 SQL 组成,其中的 SQL 部分即为:Structured Query Language,意为结构化查询语⾔,是访问数据库的最常⻅的标准化语⾔。

MySQL 是一款优秀的、开源的数据库管理系统,同时 MySQL 也是一款可移植的数据库,几乎能在所有的主流系统上运行,如 Linux、Windows、Mac、Solaris 等。

关系型数据库和非关系型数据库

MySQL 也是一款关系型数据库。那么有关系数据库,自然也就有非关系型数据库,非关系型数据库也称之为 NoSQL 数据库,接下来我们分别看一下这两种数据库的特点:

关系型数据库特点:

  1. 关系型数据库以表格的形式存在,基于行来存储数据,是一个二维模式。

  2. 关系型数据库存储的是结构化数据,数据存储有固定模式,存储的数据需要适应表结构,也就是说定义好表结构之后,数据不能随意插入。

  3. 关系型数据库可以设置管理不同数据字段之间关系的规则,例如一对一、一对多、多对多等。

  4. 大部分关系型数据库都支持 SQL(结构化查询语言),而且都支持复杂的关联查询。

  5. 关系型数据库支持事务,通过事务的 ACID 特性严格或者实时保证数据的一致性。

当然,关系型数据库也存在一定的缺点,否则也就没有非关系型数据库什么事了,关系型数据库的缺点主要如下:

  • 水平扩容不太友好,需要复杂的技术来支持,如分库分表等。

  • 定义了严格的数据格式,因此存储的数据格式会受到限制,无法随意动态的插入不同格式的数据。

  • 关系型数据库为了保证数据的持久性,一般会将数据持计划到磁盘,因此在高并发和海量数据场景下,读写性能会受到一定的影响。

而正因为关系型数据库有一定的缺点和局现象,所以有时候往往需要结合非关系型数据库来一起使用,非关系型数据库有以下特点:

  • 非关系型数据库一般存储非结构化数据,比如文本,图片,音频等。

  • 非关系型数据库的“表”之间没有关联关系,可扩展性强。

  • 保证数据的最终一致性,遵循 BASE 理论。

  • 高并发和海量数据场景下,仍然具有高效读写能力。

  • 支持分布式,扩缩容简单。

分析了两种数据库的特点,不知道大家有没有一个想法就是能不能把这两种数据库的优点都结合起来呢?答案是可以的,目前已经有了所谓的 NewSQL,其结合了关系型数据库和非关系型数据库的部分优点,如 TiDB,VoltDB,ScaleDB 等

MySQL 的发展历史

  • MySQL 的 1.0 版本在 1996 发布,不过一般我们并不把这个时间作为 MySQL
    的诞生点,因为这个版本的受众太少,并没有得到广泛的推广应用。

  • 2001 年,MySQL 发布了 3.23 版本,这个版本可以认为是 MySQL 的诞生点。在这个版本中,MySQL 有比较大的改进就是采用 MyISAM 引擎替换了老旧而且有诸多限制的 ISAM 引擎,而且同时也可以支持 InnoDB 引擎,不过此时的InnoDB 并不在 MySQL 默认的二进制发行版本中,如果想要 InnoDB 引擎,需要手动编译。

  • 2003 年,MySQL 发布了 4.0 版本,新增了一些高级特性和语法,而且和 InnoDB 引擎也正式“结合”了。

  • 2005 年,发布了 4.1 版本,开始支持 UTF-8 字符集

  • 2006 年,新增了视图,触发器和存储过程等企业级特性。

  • 2008 年 1 月,MySQL AB 公司被 Sun 公司以 10 亿美金收购。

  • 2008 年 11 月,Sun 发布了收购 MySQL 后的第一个版本
    5.1,在这个版本引入了分区的概念,同时新增了基于行的复制功能,并移除了一些老旧引擎。

  • 2009 年 4 月,Oracle 公司以 74 亿美元收购 Sun 公司,从此 MySQL 归属于 Oracle。

  • 2010 年,Oracle 发布了收购 Sun 公司以来的第一个 MySQL 版本 5.5,这个版本开始 InnoDB 引擎正式成为
    MySQL 的默认引擎。

  • 2013 年,MySQL 发布了 5.6 版本,这个版本改进了 InnoDB 存储引擎,增加了全文索引能力。

  • 2015 年,MySQL 发布了 5.7 版本,这个版本开始支持 json 数据类型。

  • 2018 年,MySQL 发布了 8.0 版本,这个版本官方提供的数据是比 5.7 版本快 2 倍。

目前来说,最常用的还是 5.7 版本,当然,也有许多系统已经升级到 8.0 版本。

MySQL 逻辑架构
下图是 MySQL 的一个简易版的逻辑架构图:
在这里插入图片描述
从上图可以看到,MySQL 中分为了 Server 层和存储引擎层,这也是 MySQL 数据库相比较其他数据库的一个重要特点:插件式存储引擎。

所以在 MySQL 中,存储引擎是基于单张表来定义的,而不是基于整个数据库,也就是说我们可以给每一张表定义不同的存储引擎,Server 层最终通过调用存储引擎层的接口来实现一系列操作。

关于这张图我们后续实验中还会陆续深入分析,希望大家能牢记这张简图,这对理解 MySQL 会有极大帮助。

MySQL 存储引擎介绍

MySQL 中的存储引擎是插拔式的,我们可以自由选择合适的存储引擎。

  • InnoDB 引擎

    InnoDB 从 MySQL 5.5 开始成为了 MySQL 默认的存储引擎,大部分情况下,我们都会选择这个引擎。InnoDB 支持事务,它具有提交、回滚和崩溃恢复等能力来保护用户数据。其内部采用 MVCC 机制来实现高并发,支持行级锁,实现了 SQL 92 的四个标准隔离级别。为了保证数据的完整性,InnoDB 引擎还支持外键引用来实现完整性约束。

  • MyISAM 引擎

    在 MySQL 5.1 及之前的版本,MyISAM 都是默认的存储引擎。MYISAM 引擎不支持事务和行级锁,其设计简单,数据以紧密格式存储,在某些场景如果可以忍受数据丢失(比如日志收集),那么也可以考虑使用 MyISAM 引擎。MyISAM 引擎拥有较高的插入和查询速度。

  • Memory 引擎

    Memory 引擎所有的数据都保存在内存中,所以其速度是非常快的,不过因为其数据保存在内存中,重启之后数据会全部丢失(表结构不会丢失)。Memory 引擎表可以用于缓存,因为其支持 Hash 索引,所以查找速度非常快,但是 Memory 表也只支持表级锁,因此并发的写入性能比较低。

  • CSV 引擎

    CSV 引擎可以将普通的 CSV 文件作为 MySQL 表来存储,不过需要注意的是,其不支持索引。

  • Archive 引擎

    这种引擎只支持 insert 和 select 两种操作,而且其在 5.1 版本之前也不支持索引。Archive 引擎会利用 zlib 算法对插入的数据进行压缩,所以正如其名字一样,比较适合于存储归档数据,比如日志和数据采集类应用。

  • Federated 引擎

    Federated 引擎本身并不存储数据,仅仅起到了一个代理作用,它会创建一个远程到 MySQL 服务器的客户端连接,并将查询传输到远程服务器执行,该引擎默认是被禁用的。

  • 其他引擎

    除了上面介绍的这些存储引擎之外,MySQL 其实还有非常多的引擎,比如:Maria 引擎,Blackhole 引擎,Merge 引擎等等,还有 NDB 集群引擎,以及一些第三方引擎等。在索引的存储引擎中,最关键的就是 InnoDB 和 MyISAM 两种引擎,这也是一道高频面试题,关于这两种引擎,后续文章中还会结合索引来更深入的介绍其特性。

如何选择存储引擎

  • 如果业务系统中对数据要求比较高,且需要支持事务,那么 InnoDB 是不错的选择。

  • 如果业务系统中查询多,更新少,而且对查询性能要求比较高,可以选择 MyISAM 引擎。

  • 如果业务系统中在查询中有建立临时表的需求,那么可以考虑使用 Memory 引擎。

需要说明的是,既然 MySQL 中支持这么多存储引擎,所以其自然是有定义规范的,也就是说,只要满足一定规范,而团队实力又强的话,我们也可以考虑开发自己的存储引擎,开发自己的存储引擎需要使用 C 语言进行编写,规范可以参考这里

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

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

相关文章

【WSL】[02] windows subsytem linux 配置和使用

第【2】章前言: 上一篇我们已经安装好了ubuntu在WSL下的GUI的桌面:我们现在继续进一步进行配置工作。同时也把,运用WSL的流程摸一把,以备后用。 1 在windows的PowerShell终端进行配置和查询: 1.1 查询所有支持的可以…

极小尺寸,超低功耗,高度集成,天翼物联NB-IoT云芯模组

数字经济时代,物联网已融入我们的日常生活。比如,智能抄表代替人工上门抄表,运动手环实时传输心率情况,烟感报警器远程告警……这些高科技背后都有一颗小而强大的芯片在支撑。 天翼物联云芯模组依托天翼物联网平台(AIo…

制造业项目管理软件如何帮助企业做好项目管理?

项目产品、采购、销售、BOM变更管理不全面; 项目进度追踪管理难; 项目进度款管不清、项目尾款管不到; … … 而以上仅仅是生产制造企业所面临的项目管理问题的“冰山一角”。 采用“项目制”生产模式的制造企业,需要做到项目…

理解XaaS(SaaS、Baas、Paas、Iaas)

XaaS : XX as a Service 参考原文 以电商来举例 一套电商系统需要的开发资料 产品经理:设计电商系统 前端工程师:开发页面 后端工程收:开发后端 运维工程师:搭建环境,部署到服务器,负责后期维护等 服务器…

指南解读:急性心力衰竭中国急诊管理指南(2022)

心力衰竭(heart failure,HF 简称心衰)是由于心脏结构和 / 或功能异常导致心室充盈和/或射血能力受损的一组临床综合征,其病理生理学特征为肺淤血和/或体循环淤血、伴或不伴有组织器官低灌注,主要临床表现为呼吸困难、乏…

美容门店信息化管理系统该如何搭建?不妨参考一下百数

随着人们的生活水平越来越高,人们在解决了温饱问题之后有了更多的追求。其中美容正在成为不少人新的必做项目, 迎合了人们对于爱美的需求。目前我国美容机构市场规模已超过4500亿元,行业从业人员超过3000万。据国家工商联统计数字显示&#x…

JS_fetch请求数据

1、axios 比如常用的需求中,想要请求A接口的数据再去请求B接口的数据,axios的做法是需要先请求A接口,然后在A接口的成功的回调函数里面去请求B接口。 fetch使用的情况并不多,主要是由于存在兼容性问题,在企业中就不会…

南大通用数据库-Gbase-8a-学习-29-常用函数介绍

一、测试环境 名称值cpu12th Gen Intel Core™ i7-12700H操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2Gbase-8a数据库版本9.5.3.27 二、函数介绍 1、HEX (1)说明 将数字或字符串转换成十六进制形式。 (2)例…

2022年我去过最喜欢的16座城市

欢迎关注「苏南下」分享我的旅行、摄影心得感悟2022 年我去了 16 个城市地区,拍了 40条旅行短片。又是很久没更新,2022 年过得好快,马上就是 2023 了。如果用一个关键词来总结我这一年,我觉得可以是:运气好。从年初 1 …

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级版游戏。 升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势: 斯波克:《星际迷航》主角…

捷报频传 | Bonree ONE获2022科技赋能金融业场景金融建设突出贡献奖

近日,由《金融电子化》杂志社主办的“2022第十三届金融科技应用创新奖”评选结果正式揭晓。本次评奖围绕项目先进性、项目创新点、项目对推动数字化转型及提升服务能力的作用、社会及经济效益等维度展开。博睿数据一体化智能可观测平台Bonree ONE再次脱颖而出&#…

【 Tomcat服务器】

文章目录二、Web服务器2.1 概念2.1.1 什么是Web2.1.2 什么是Web服务器2.2 常见Web服务器2.3 Tomcat服务器2.3.1 Tomcat的下载2.3.2 Tomcat的安装2.3.3 Tomcat的目录结构2.3.4 Tomcat的启动2.3.5 Tomcat的停止运行所需jar包2.3.5 Tomcat的停止2.3.6 修改Tomcat端口号2.3.7 项目部…

有关文件IO操作的错误(error)提示

在编程中,我们一般都是要讲究一定的使用规范的。按照一定的规范编写代码,返回运行提示,在代码运行出现问题时能方便我们能快速的定位到问题的所在。 特别是在使用库函数或者系统调用的API的时候,我们最好也要关注函数的返回值所能…

INTENT2022--一道包含12个反调试反虚拟机操作的ctf题解

作者:selph 从一道Re题学习12种反调试反虚拟技术 题目:AntiDebuggingEmporium 来源:INTENT CTF 2022 Re 这个题目很有意思,里面出现了总共12个反调试反虚拟机的操作,本文内容分两部分,前部分是题解&…

六西格玛奠基人之张驰染阳杂记

中招第1天: 上周四从外地出差回来,落地就觉得有点全身乏力,晚上开始发冷,预感可能中招了。大数据预测深圳第一波疫情高峰发生在12月20日,陆续接到深圳同事亲友中招的消息,感慨真是神预测。 因为头晕目眩&…

LeetCode419.甲板上的战舰

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 X 或者是一个空位 . ,返回在甲板board上放置的 战舰 的数量…

Elasticsearch 日志能否把全部请求打印出来?

1、实战问题请问一下球主,es怎么配置可以把请求日志都打印出来。就是不管是调用借口,还是kibana查询数据,es能打印dsl的请求日志吗??求指导。怎么配置?——问题来源:https://t.zsxq.com/09vv8rq…

现代细胞计数分析平台丨OMIQ简介

单细胞分析,变得简单 OMIQ是一个现代细胞计数分析平台,它将机器学习和分析管道与经典手动分析的世界连接起来。它允许研究人员在一个软件中完成他们的整个工作流程,从原始数据到统计意义,使用他们自己的专业知识和熟悉的工具与数…

java养老系统养老院系统养老院网站源码

简介 本系统是养老院系统,主要是老人入住养老院的业务逻辑,有护工和医生对老人进行护理看病记录等信息管理,缴费入住外出记录管理等。 演示视频 https://www.bilibili.com/video/BV18i4y1Z7je/?share_sourcecopy_web&vd_sourceed0f04fb…

2022(核酸年)结束了

目录2022目标回顾2022生活回顾2023目标祝词现在是北京时间2022-12-30 15:08,再有一天2022就结束了,岁月催人老啊!同样又到了一年一度总结的时候了,我清楚记得在 2021年度总结中定下了我的今年目标,即如此那我们一同看看…