蚂蚁金服内部的这份MySQL学习笔记火了,完整版首次公开!

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 一份非常详细的MySQL学习笔记,助你快速掌握MySQL!

前言

我们每天都在访问各种各样的⽹站、APP,如微信、QQ、抖⾳、今⽇头条等,这些网站上⾯都存在⼤量的信息数据,这些信息数据都需要有地⽅存储,一般这些数据都存储在哪呢?

一般这些数据都存储在数据库中。所以如果我们需要开发⼀个⽹站、app,数据库是我们必须掌握的技术,常⽤的数据库有mysql、oracle、sqlserver、db2等。 上⾯介绍的⼏个数据库,oracle性能排名第⼀,服务也是相当到位的,但是收费也是⾮常⾼的,⾦融公司对数据库稳定性要求⽐较⾼,⼀般会选择oracle。 mysql是免费的,其他⼏个⽬前暂时收费的,mysql在互联⽹公司使⽤率也是排名第⼀。资料也⾮常完善,社区也⾮常活跃,所以我们主要学习mysql。

数据库常⻅的概念

DB:数据库,存储数据的容器。

DBMS:数据库管理系统,又称为数据库软件或数据库产品,⽤于创建或管理DB。

SQL:结构化查询语⾔,⽤于和数据库通信的语⾔,不是某个数据库软件持有的,⽽是⼏乎所有的主流数据库软件通⽤的语⾔。中国⼈之间交流需要说汉语,和美国⼈之间交流需要说英语,和数据库沟通需要说SQL语⾔。

数据库存储数据的⼀些特点

  • 数据存放在表中,然后表存放在数据库中
  • ⼀个库中可以有多张表,每张表具有唯⼀的名称(表名)来标识⾃⼰
  • 表中有⼀个或多个列,列又称为“字段”,相当于java中的“属性”
  • 表中每⼀⾏数据,相当于java中的“对象”

数据类型选择的⼀些建议

(1) 选⼩不选⼤:⼀般情况下选择可以正确存储数据的最⼩数据类型,越⼩的数据类型通常更快,占⽤磁盘,内存和CPU缓存更⼩。

(2) 简单就好:简单的数据类型的操作通常需要更少的CPU周期,例如:整型⽐字符操作代价要⼩得多,因为字符集和校对规则(排序规则)使字符⽐整型⽐较更加复杂。

(3) 尽量避免NULL:尽量制定列为NOT NULL,除⾮真的需要NULL类型的值,有NULL的列值会使得索引、索引统计和值⽐较更加复杂。

(4) 浮点类型的建议统⼀选择decimal

(5) 记录时间的建议使⽤int或者bigint类型,将时间转换为时间戳格式,如将时间转换为秒、毫秒,进⾏存储,⽅便⾛索引

MySQL权限⼯作原理

mysql是如何来识别⼀个⽤户的呢?

mysql为了安全性考虑,采⽤ 主机名+⽤户名 来判断⼀个⽤户的⾝份,因为在互联⽹中很难通过⽤户名来判断⼀个⽤户的⾝份,但是我们可以通过ip或者主机名判断⼀台机器,某个⽤户通过这个机器过来的,我们可以识别为⼀个⽤户,所以mysql中采⽤⽤户名+主机名来识别⽤户的⾝份。当⼀个⽤户对mysql发送指令的时候,mysql就是通过⽤户名和来源(主机)来断定⽤户的权限。

Mysql权限验证分为2个阶段:

(1)阶段1:连接数据库,此时mysql会根据你的⽤户名及你的来源(ip或者主机名称)判断是否有权限连接

(2)阶段2:对mysql服务器发起请求操作,如create table、select、delete、update、create index等操作,此时mysql会判断你是否有权限操作这些指令

如何正确的使⽤索引?

学习索引,主要是写出更快的sql,当我们写sql的时候,需要明确的知道sql为什么会⾛索引?为什么有些sql不⾛索引?sql会⾛那些索引,为什么会这么⾛?我们需要了解其原理,了解内部具体过程,这样使⽤起来才能更顺⼿,才可以写出更⾼效的sql。

Mysql中索引分为聚集索引(主键索引)和⾮聚集索引

聚集索引(主键索引)

每个表⼀定会有⼀个聚集索引,整个表的数据存储以b+树的⽅式存在⽂件中,b+树叶⼦节点中的key为主键值,data为完整记录的信息;⾮叶⼦节点存储主键的值。

通过聚集索引检索数据只需要按照b+树的搜索过程,即可以检索到对应的记录。

⾮聚集索引

每个表可以有多个⾮聚集索引,b+树结构,叶⼦节点的key为索引字段字段的值,data为主键的值;⾮叶⼦节点只存储索引字段的值。

通过⾮聚集索引检索记录的时候,需要2次操作,先在⾮聚集索引中检索出主键,然后再到聚集索引中检索出主键对应的记录,该过程⽐聚集索引多了⼀次操作。

整理的这份MySQL学习笔记非常全面且详细,覆盖了 MySQL 基础学习的方方面面,非常适合初学者入门!这份MySQL学习笔记一共了578页,现在分享发给大家。关注公种浩:程序员追风,回复 012 免费获取这份MySQL学习笔记,

资料也按目录进行编排,每一章下面都有更具体的内容:

总结

学习是一辈子的事情,学完一段时间之后,想要检查学习效果如何,其实最好的方法就是可自己去总结一下。比如我在学习的时候会自己做笔记,然后自己再总结,自己的做的笔记也可方便后续的复习,且都是自己的理解。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
126 6
|
1月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
53 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
70 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
61 1
|
5月前
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
38 0
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
55 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
3月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
122 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
3月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
3月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
38 6
|
3月前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
49 4