MySQL简介、M有SQL的存储引擎、表、字段和数据

news/2024/4/25 13:59:38/文章来源:https://blog.csdn.net/yuandfeng/article/details/129207588

Java知识点总结:想看的可以从这里进入

目录

    • 2、MySQL特性介绍
      • 2.1、MySQL简介
      • 2.2、存储引擎
      • 2.3、表、字段、数据

2、MySQL特性介绍


2.1、MySQL简介

MySQL 是一个关系型数据库管理系统(RDBMS),于2009年被 Oracle 公司收购。它是一种关联数据库结构,将数据保存在不同的表中,而不是将所有数据放在一起,从而增加了速度并提高了灵活性。

在MySQL6开始MySQL分为两个版本:社区版(免费)和商业版(收费)。

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,可以修改源码来开发自己的 MySQL 系统。
  • MySQL体积小、速度快、成本低、开源这些特点,导致越来越多的中小公司选择使用MySQL(Twitter、YouTube、美团等等)

其中 MySQL8有两个重要的版本,分别是:2015年发布的MySQL5.7 和2016年发布的MySQL8.0。尤其是8.0版本做了很多的增强,在源码上进行了重构,大大提高了其性能。

2.2、存储引擎

mysql有两种存储引擎:InnoDB、MyISAM。默认的为InnoDB。以读写插入为主的博客系统、新闻系统等使用MyISAM,增删改查都高,需要保证数据的完整性,并发量高,支持事务和外键的使用InnoDB

  • InnoDB(mysql5.5后默认使用的)

    • 数据存储格式:.frm文件存储表结构、.idb文件存储索引和数据
    • 锁:支持表锁和行锁,有四种隔离级别
      • 可重复读:可解决脏读、不可重复读,不能解决幻读
      • 读未提交(一个事务可以读取另一个未提交事务的数据):脏读、不可重复读,幻读均不能解决
      • 读已提交:解决脏读,不能解决不可重复读,幻读
      • 串行化:都可以解决
    • 事务和外键:支持事务、支持外键
      • begin:开始事务
      • rollback:回滚事务
      • commit:提交事务
    • 主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值。因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引。最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。
    • 内存:需要较大的内存,会建立专门的缓冲池用于高速缓冲数据和索引。
    • 数据保存顺序:按主键大小保存
  • MyISAM:

    • 数据存储格式:.frm文件存储表结构、.MYD存储表数据、.MYIs存储索引数据
    • 锁:只支持表锁,读取时加共享锁,写入时加排他锁。
    • 事务和外键:不支持事务、不支持外键
    • 采用非聚簇索引
    • 内存:可被压缩,存储空间较小
    • 数据保存顺序:按数据插入的顺序
  • 对比

    MYISAMINNODB
    事务支持不支持支持
    数据行锁定不支持(为表锁)支持
    外键约束不支持支持
    全文索引支持新版本支持
    表的空间大小较小大,约为2倍
    物理空间的存储.frm表结构定义文件
    .MYD 数据文件
    .MYI 索引文件
    数据库表中有一个*.frm文件
    及其上级目录下的ibdata文件

InnoDB 四大特性:

  1. 插入缓冲(insert buffer)

    ​ 索引是存储在磁盘上的,所以对于索引的操作需要涉及磁盘操作。如果我们使用自增主键,在插入主键索引时,不需要磁盘的随机 I/O。如果我们使用的是普通索引,大概率是无序的,此时就涉及到磁盘的随机 I/O,而随机I/O的性能是比较差的(磁盘顺序I/O的性能是磁盘随机I/O的4000~5000倍)。

    ​ 因此,InnoDB 存储引擎设计了 Insert Buffer ,对于非聚集索引的插入或更新操作,不是每一次直接插入到索引页中,而是先判断插入的非聚集索引页是否在缓冲池(Buffer pool)中,若在,则直接插入;若不在,则先放入到一个 Insert Buffer 对象中,然后再以一定的频率和情况进行 Insert Buffer 和辅助索引页子节点的合并操作,这时通常能将多个插入合并到一个操作中(因为在一个索引页中),这就大大提高了对于非聚集索引插入的性能。

    ​ 插入缓冲的使用需要满足以下两个条件:1)索引是辅助索引;2)索引不是唯一的。

    ​ 因为在插入缓冲时,数据库不会去查找索引页来判断插入的记录的唯一性。如果去查找肯定又会有随机读取的情况发生,从而导致 Insert Buffer 失去了意义。

  2. 二次写(double write)

    ​ InnoDB 的的叶子节点一般是16kb,而操作系统写文件是以4kb作为单位,所以操作系统需要写4个块。如果数据在分块写的时候发生了某些异常,导致数据只要部分是写入成功的,这时会出现数据不完整的问题,而且这种问题无法通过日志进行恢复。

    ​ 这时就需要使用二次写。它两部分组成,一部分为内存中的 doublewrite buffer,其大小为2MB,另一部分是磁盘上共享表空间中连续的128个页,即2个区(extent),大小也是2M。

    ​ 先将脏数据复制到内存中的 doublewrite buffer,之后通过 doublewrite buffer 再分2次,每次1MB写入到共享表空间的磁盘上(顺序写,性能很高),完成后马上调用 fsync 函数,将doublewrite buffer中的脏页数据写入实际的各个表空间文件(离散写)。如果操作系统在将页写入磁盘的过程中发生崩溃,InnoDB 再次启动后,发现了一个 page 数据已经损坏,InnoDB 存储引擎可以从共享表空间的 doublewrite 中找到该页的一个最近的副本,用于进行数据恢复。

  3. 预读(read ahead)

    ​ 当 InnoDB 预计某些 page 可能很快就会需要用到时,它会异步地将这些 page 提前读取到缓冲池(buffer pool)中。InnoDB线性预读(linear read-ahead)(随机预读被废弃)

    ​ 线性预读:线性预读以 extent块为单位(1个 extent 等于64个 page),将下一个extent 提前读取到 buffer pool 中。它通过innodb_read_ahead_threshold控制执行预读操作的触发阈值,如果一个 extent 中的被顺序读取的 page 超过或者等于该参数变量时,Innodb将会异步的将下一个 extent 读取到 buffer pool中。

    ​ 随机预读:以 extent 中的 page 为单位,将当前 extent 中的剩余的 page 提前读取到 buffer pool 中。当同一个 extent 中的一些 page 在 buffer pool 中发现时,Innodb 会将该 extent 中的剩余 page 一并读到 buffer pool中,

  4. 自适应哈希索引

    ​ 哈希索引一般情况下查找的时间复杂度为 O(1),但是它不支持范围索引,所以InnoDB只是在热点数据等场景长自适应哈希索引。

    ​ InnoDB 会监控对表上索引的查找,如果观察到某些索引被频繁访问,变认为这些索是热数据,则对其建立哈希索引,自适应哈希索引通过缓冲池的 B+ 树构造而来,建立的速度很快,InnoDB 会自动根据访问的频率和模式来为某些页建立哈希索引。

2.3、表、字段、数据

关系型数据,都是由一张张的表组成的,而表中的每一行都是一条数据,每一列对应一个字段。每张表都有一个名字,用来标识自己,表名具有唯一性。

把数据库结构对应到Java中:

  1. 每一张表都对应Java中的一个类
  2. 每一个字段都对应了Java中的一个属性
  3. 每一行的数据都对应一个实体对象。

image-20230222151354602

image-20230222151944233

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

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

相关文章

Hive---排序

Hive语法之排序 文章目录Hive语法之排序全局排序(Order By)升序降序按照别名排序多个列排序每个 Reduce 内部排序(Sort By)设置 reduce 个数查看设置 reduce 个数分区排序(Distribute By)设置 reduce 个数簇…

仅花半年时间,他从外包月薪5K到阿里月薪15K,究竟经历了什么?

背景介绍:“渣渣”二本,95年Java程序员**外包类型:**传统外包公司**内容简介:**朋友从一个传统公司是如何修仙到阿里巴巴?分享一些他的真实经历,希望对你有帮助。**学习路线:**基础(…

为什么HR眼中,Python是真正的简历加分项?

教育部在发布的关于《2023届高校毕业生预计1158万 校园招聘月启动》文中明确指出:“2023届高校毕业生预计1158万,同比增加82万人”。除开考研、考公的少数同学,几百万大军拼命往大企业投简历,求职竞争十分激烈。 来源&#xff1a…

优化长尾关键词有什么好处?在线长尾关键词挖掘

​想知道为什么要使用长尾关键词? 好吧,它们可以帮助你轻松找到合适的受众。 ​ 1.获得更高的转化率 长尾关键词对于搜索特定信息更有用。使用长尾关键词时通常会获得更高的转化率,因为内容与受众的需求更相关。 举个例子:你正…

数影周报:动视暴雪疑似数据泄露,数据出境安全评估申报最新进展

本周看点:动视暴雪疑似员工敏感信息及游戏数据泄露;谷歌云计算部门:两名员工合用一个工位;数据出境安全评估申报最新进展;TikTok Shop东南亚商城在泰国和菲律宾公布;智己汽车获九大金融机构50亿元贷款签约.…

Redis:实现全局唯一ID

Redis:实现全局唯一ID一. 概述二. 实现(1)获取初始时间戳(2)生成全局ID三. 测试为什么可以实现全局唯一?其他唯一ID策略补充:countDownLatch一. 概述 全局ID生成器:是一种在【分布式…

RK3568平台开发系列讲解(驱动基础篇)中断子系统框架

🚀返回专栏总目录 文章目录 一、中断硬件的组成二、软件框架三、中断常见概念沉淀、分享、成长,让自己和他人都能有所收获!😄 📢中断是指 CPU 正常运行期间,由于内外部事件或程序预先安排的事件,引起的 CPU 暂时停止正在运行的程序, 转而为该内部或外部预先安排的事…

基于Frenet优化轨迹的⾃动驾驶动作规划⽅法

动作规划(Motion Control)在⾃动驾驶汽⻋规划模块的最底层,它负责根据当前配置和⽬标配置⽣成⼀序列的动作,本⽂介绍⼀种基于Frenet坐标系的优化轨迹动作规划⽅法,该⽅法在⾼速情况下的ACC辅助驾驶和⽆⼈驾驶都具有较强…

2023年,尽量还是别裸辞了吧···

你知道什么叫 度日如年 吗?就是在家待业的每一天。你知道什么叫心焦如焚吗?就是投出100份简历却等不来一个回应。 当前就业环境,裁员、失业消息满天飞,好像能有一份工作就不错了,更别说高薪。其实这只是一方面。另一方…

基于BP神经网络的性别识别,BP神经网络详细原理,自编码神经网络代码,神经网络案例之18

目标 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 数据 神经网络参数 基于BP神经网络 性别识别的MATLAB代码 效果图 结果分析 展望 背影 男人体内蛋白质比例大,女生…

网易的“草长莺飞二月天”:增长稳健,加码研发,逐浪AI

2月23日,网易发布了2022年第四季度财报。 这是网易与暴雪分道扬镳后的首份财报,加上近期AIGC热度扩散至游戏、教育等各个领域,网易第四季度业绩及其对于GPT等热门技术的探索受到市场关注。 根据财报,第四季度,网易营…

SAFe(Scaled Agile Framework)学习笔记

1.SAFe 概述 SAFe(Scaled Agile Framework)是一种面向大型企业的敏捷开发框架,旨在协调多个团队和部门的协同工作,以实现高效的软件开发和交付。下面是SAFe框架的简单介绍总结: SAFe框架包括以下四个层次&#xff1a…

【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL

一 LVGL简介最近emwin用的比较烦躁,同时被LVGL酷炫的界面吸引到了,所以准备换用LVGL试试水。LVGL(轻量级和通用图形库)是一个免费和开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素,美丽的视觉效…

Unable to connect to Redis无法连接到Redis

文章目录项目场景:问题描述原因分析:解决方案:项目场景: 提示:这里简述项目相关背景: 在某个项目中的提交按钮不好用 org.springframework.data.redis.RedisConnectionFailureException: Unable to con…

程序员必备的软技能-金字塔原理拆解(上)

原书 290千字,本文预计 14千字,拆解比 20:1,预计阅读时长 15分钟序言日常工作中,常常因为思维、表达方式不对产生不想要的结果:写了一个小时的周报,领导却不满意?跟团队讲了半天自己…

go module构建项目

在go 1.11版本中引入了Go Module内置的包管理模块,是GOPATH的替代品,集成了版本控制和软件包分发支持的功能。即go使用modules管理依赖,项目依赖构建时不需要再依赖GOPATH环境变量。 要使用go module首先要激活modules .升级go到1.11版本 .这…

Mac电脑_GitHub提交项目至仓库

第一步(准备工作): Mac 电脑自带 git , 无需安装 1. 创建一个项目 demo1 在 github 上 2. 创建 ssh 密钥 打开终端: ssh-keygen -t rsa -C "your_emailyouremail.com" 此处输入两次密码, 直接…

MyBatis-常用SQL操作

一、动态SQL 1.概述】 1.1动态SQL: 是 MyBatis 的强大特性之一,解决拼接动态SQL时候的难题,提高开发效 1.2分类: if choose(when,otherwise) trim(where,set) foreach 2.if 2.1 做 where 语句后面条件查询的,if 语句是可以…

【Java基础 下】 027 -- 异常、File、综合案例

目录 一、异常 1、异常的分类 ①、Error ②、Exception ③、小结 2、编译时异常和运行时异常 ①、编译时异常 ②、运行时异常 ③、为什么异常要分成编译时异常和运行时异常? ④、小结(运行时异常和编译时异常的区别) 3、异常的作用 ①、查看b…

WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务

PowerShell 停止、启动、暂停和重启服务、卸载服务 PowerShell 停止、启动、暂停和重启服务 官文 powershell卸载服务 官文 目录PowerShell 停止、启动、暂停和重启服务、卸载服务停止、启动、暂停和重启停止服务启动服务暂停服务重启服务卸载移除服务停止、启动、暂停、重启…