MySQL相信大家都耳熟能详了, 毕竟其还不错的性能和免费的特点深受国人的喜爱, 本篇文章将作为我《MySQL》系列的一篇文章, 主要用作整理和简单的概述MySQL相关的一些知识点
ok, 接下来我们开始进入正题, 从最简单的开始
关系型数据库是一个结构化的数据库, 创建在关系模型(二维表格模型)基础上, 一般面向于记录 SQL 语句就是一种基于关系型数据库的语言, 用于执行对关系型数据库中数据的检索和操作, 主流的关系型数据库包括: Oracle, MySQL, SQL Server等
本篇文章默认以 MySQL的 InnoDB引擎为主
非关系型数据库也叫 NoSQL, 采用键值对的形式进行存储. 一般来讲, 除了主流的关系型数据库之外的数据库, 都认为是非关系型
他的读写性能很高, 易于扩展, 主流的 NoSQL有: Redis, MongDB, Hbase等
适合使用的场景:
关系型数据库:
非关系型数据库
在 MySQL中, Server层按顺序执行SQL的步骤如下:
接下来我将按照 MySQL执行 SQL的步骤来进行讲解
图1 展示了 MySQL各组件之间协同工作的逻辑视图, 也是一条SQL查询的执行流程, 接下来我主要围绕这张图来讲述一下他们和 MySQL之间的关系
图1 MySQL架构逻辑视图(图片来自于JavaGuide)
客户端的服务主要是包括连接处理, 身份验证, 确保安全性等. 大多数 MySQL的核心功能都在第二层, 包括查询解析, 分析, 优化, 以及所有的内置函数, 所有跨存储引擎的功能也都在这一层来实现: 存储过程, 触发器, 视图等
第三层是存储引擎层, 负责MySQL中数据的存储和提取. 其架构模式是插件式的, 支持 InnoDB, MyISAM, Memory等多个存储引擎, 现在最常用的存储引擎是 InnoDB, 在 MySQL 5.5版本之后成为了默认存储引擎
默认情况下, 每个客户端连接都会在服务器进程中拥有一个线程, 该连接的查询只会在这个线程中执行. 当客户端(应用)连接到 MySQL服务器时, 服务器需要对其进行身份验证, 身份验证基于用户名, 密码, 主机ip和端口号, 客户端连接成功之后, 服务器会继续验证该客户端的查询权限(例如, 是否有查看user库的权限, 是否允许对mysql库的user表进行SELECT)
创建新连接时身份验证基本信息
在执行一条 SELECT查询语句的时候会先去查询缓存看能否直接命中, 能命中就直接返回, 缓存中没有才会去进行下一步
只要表有更新操作, 那么这张表的缓存就会更新, 所以对于一张更新较[]频繁的表来说缓存命中是比较低的 从 MySQL 5.7.20版本开始,
查询缓存已经被官方标注为废弃了, 8.0版本完全移除 在 MySQL 8.0版本之前, 想关闭查询缓存可以将参数
query_cache_type 设置为 DEMADN
在该步骤主要进行两件事:
在优化器中主要做了三件事:
prepare 预处理阶段:
optimize 优化阶段:
execute 执行阶段:
优化器并不关心查询引擎类型, 但是存储引擎对于查询优化是有影响的.
在 MySQL中, 可以使用 show engines命令来查询 MySQL支持的所有存储引擎
可以看到, 当前默认存储引擎是InnoDB, 同时只有InnoDB是支持事务的
老生常谈了, 也是面试高频考点
MyISAM | InnoDB | |
---|---|---|
行级锁 | 只有表级锁支 | 持行级锁和表级锁, 默认为行级锁 |
事务 | 不支持事务 | 实现了四个隔离级别, 具有提交和回滚事务的能力, 默认使用 REPEATABLE-READ(可重读)隔离级别是可以解决幻读问题发生的 |
外键 | 不支持 | 支持, 在阿里的<java开发手册>中是不推荐使用外键的 |
异常崩溃后的安全恢复 | 不支持 | 支持, redo log |
MVCC | 不支持 | 支持 |
未提交读 (READ UNCOMMITTED): 在事务中可以查看其他事务未提交的修改
读提交 (READ COMMITTED):一个事务可以看到其他事务在他开始之后提交的修改
M可重复读(REPEATABLE READ): 同一个事务在多次读取相同行数据的结果相同
串行化(SERIALIZABLE):最高的事务隔离级别, 解决了幻读问题. 其会在读取的每一行数据都进行加锁操作
如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
Python全套学习资料
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
上述所有资料 ?? ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓