半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字 “超硬核” 文章!(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字 “超硬核” 文章!

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

1d08d8edcc7c432cb36ec517d5d859b0.png

MySQL必会知识点梳理 (必看)

4bdea1132530427e8b3554a2e2b47294.png

评论区评论要资料三个字即可获得MySQL全套资料 !


【介绍】


image.png

什么是数据库

  • 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
  • 每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
  • 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。


MySQL数据库


MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。


MySQL 是开源的,目前隶属于 Oracle 旗下产品。

MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

MySQL 使用标准的 SQL 数据语言形式。

MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。

MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。

MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。

MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。


RDBMS 术语

在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语

数据库: 数据库是一些关联表的集合。

数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。

行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

外键:外键用于关联两个表。

复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

MySQL 为关系型数据库(Relational Database Management System), 这种所谓的关系型可以理解为表格的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格


数据库表的存储位置

MySQL数据表以文件方式存放在磁盘中:

  1. 包括表文件、数据文件以及数据库的选项文件
  2. 位置:MySQL安装目录\data下存放数据表。目录名对应数据库名,该目录下文件名对应数据表

注:

InnoDB类型数据表只有一个*. frm文件,以及上一级目录的ibdata1文件

MylSAM类型数据表对应三个文件:


  1. *. frm —— 表结构定义文件
  2. *. MYD —— 数据文件
  3. *. MYI —— 索引文件

存储位置:因操作系统而异,可查my.ini

【数据类型】

  • MySQL提供的数据类型包括数值类型(整数类型和小数类型)、字符串类型、日期类型、复合类型(复合类型包括enum类型和set类型)以及二进制类型 。

一. 整数类型

4672264710334b75b873400c694824bc.png

  • 整数类型的数,默认情况下既可以表示正整数又可以表示负整数(此时称为有符号数)。如果只希望表示零和正整数,可以使用无符号关键字“unsigned”对整数类型进行修饰。
  • 各个类别存储空间及取值范围。

image.png


二. 小数类型


b340d38bd1c7430e85d5f449920af39e.png


decimal(length, precision)用于表示精度确定(小数点后数字的位数确定)的小数类型,length决定了该小数的最大位数,precision用于设置精度(小数点后数字的位数)。


例如: decimal (5,2)表示小数取值范围:999.99~999.99 decimal (5,0)表示: -99999~99999的整数。


各个类别存储空间及取值范围。


image.png

三. 字符串


a1f9265fd0f4492e8037962e9cded270.png

char()与varchar(): 例如对于简体中文字符集gbk的字符串而言,varchar(255)表示可以存储255个汉字,而每个汉字占用两个字节的存储空间。假如这个字符串没有那么多汉字,例如仅仅包含一个‘中’字,那么varchar(255)仅仅占用1个字符(两个字节)的储存空间;而char(255)则必须占用255个字符长度的存储空间,哪怕里面只存储一个汉字。

各个类别存储空间及取值范围。


08b9e591ef9a4939bdb28caac0f9e340.png

四. 日期类型

  • date表示日期,默认格式为‘YYYY-MM-DD’; time表示时间,格式为‘HH:ii:ss’; year表示年份; datetime与timestamp是日期和时间的混合类型,格式为’YYYY-MM-DD HH:ii:ss’。

8b1dfde80d2d415db59240682d88a016.png

  • datetime与timestamp都是日期和时间的混合类型,区别在于: 表示的取值范围不同,datetime的取值范围远远大于timestamp的取值范围。 将NULL插入timestamp字段后,该字段的值实际上是MySQL服务器当前的日期和时间。 同一个timestamp类型的日期或时间,不同的时区,显示结果不同。

各个类别存储空间及取值范围。

e4b520c7104349b7a8c7dc26e29d8161.png

五. 复合类型

MySQL 支持两种复合数据类型:enum枚举类型和set集合类型。 enum类型的字段类似于单选按钮的功能,一个enum类型的数据最多可以包含65535个元素。 set 类型的字段类似于复选框的功能,一个set类型的数据最多可以包含64个元素。

六. 二进制类型


二进制类型的字段主要用于存储由‘0’和‘1’组成的字符串,因此从某种意义上将,二进制类型的数据是一种特殊格式的字符串。

二进制类型与字符串类型的区别在于:字符串类型的数据按字符为单位进行存储,因此存在多种字符集、多种字符序;而二进制类型的数据按字节为单位进行存储,仅存在二进制字符集binary。


8893e04e9e4a4525913ee8f9d498285b.png

【约束】

  • 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。下面文章就来给大家介绍一下6种mysql常见的约束,希望对大家有所帮助。

一. 非空约束(not null)

  • 非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
  • Null类型特征:所有的类型的值都可以是null,包括int、float 等数据类型

f3e5d6604b524ce8aef15fb405c6553c.png

二. 唯一性约束(unique)

  • 唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
  • 唯一约束不允许出现重复的值,但是可以为多个null。
  • 同一个表可以有多个唯一约束,多个列组合的约束。
  • 在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。
  • 唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。

3f0ff2876176474fa04f5a14cce677ed.png

三. 主键约束(primary key) PK

  • 主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。
  • 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。
  • 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

8d0cd7d7c03f427ba314e37f87ffb929.png

四. 外键约束(foreign key) FK

  • 外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的,可以保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。
  • 创建外键约束的顺序是先定义主表的主键,然后定义从表的外键。也就是说只有主表的主键才能被从表用来作为外键使用,被约束的从表中的列可以不是主键,主表限制了从表更新和插入的操作。

b3fe5727f84d4cc091f1192fb4557ec0.png

五. 默认值约束 (Default)

  • 若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL。

d72aea4d63814588ac939259ef07e69f.png


六. 自增约束(AUTO_INCREMENT)

  • 自增约束(AUTO_INCREMENT)可以约束任何一个字段,该字段不一定是PRIMARY KEY字段,也就是说自增的字段并不等于主键字段。
  • 但是PRIMARY_KEY约束的主键字段,一定是自增字段,即PRIMARY_KEY 要与AUTO_INCREMENT一起作用于同一个字段。

ba78411f14a64e98943c6770dd95d9c2.png

当插入第一条记录时,自增字段没有给定一个具体值,可以写成DEFAULT/NULL,那么以后插入字段的时候,该自增字段就是从1开始,没插入一条记录,该自增字段的值增加1。当插入第一条记录时,给自增字段一个具体值,那么以后插入的记录在此自增字段上的值,就在第一条记录该自增字段的值的基础上每次增加1。也可以在插入记录的时候,不指定自增字段,而是指定其余字段进行插入记录的操作。

【常用命令】

登录数据库相关命令

一. 启动服务

语法:

mysql> net stop mysql

二. 关闭服务

语法:

mysql> net start mysql

三. 链接MySQL

  • 语法:mysql -u用户名 -p密码;
root@243ecf24bd0a:/ mysql -uroot -p123456;

在以上命令行中,mysql 代表客户端命令,-u 后面跟连接的数据库用户,-p 表示需要输入密码。如果数据库设置正常,并输入正确的密码,将看到上面一段欢迎界面和一个 mysql>提示符。

image.png


四. 退出数据库

  • 语法:quit
mysql> quit

结果:

image.png


DDL(Data Definition Languages)语句:即数据库定义语句


对于数据库而言实际上每一张表都表示是一个数据库的对象,而数据库对象指的就是DDL定义的所有操作,例如:表,视图,索引,序列,约束等等,都属于对象的操作,所以表的建立就是对象的建立,而对象的操作主要分为以下三类语法


  • 创建对象:CREATE 对象名称;
  • 删除对象:DROP 对象名称;
  • 修改对象:ALTER 对象名称;

数据库相关操作


f15b87b081ce4f0d938ca1b76e03f2e7.gif


一. 创建数据库

  • 语法:create database 数据库名字;
mysql> create database sqltest;

结果:

eafc5281bb574243a3f086a31b6f8e5c.png


二. 查看已经存在的数据库

  • 语法:show databases;
mysql> show databases;


结果:

73f05f84b5e24eb381f380dc9784cb83.png


可以发现,在上面的列表中除了刚刚创建的 mzc-test,sqltest,外,还有另外 4 个数据库,它们都是安装MySQL 时系统自动创建的,其各自功能如下。

  1. information_schema:主要存储了系统中的一些数据库对象信息。比如用户表信息、列信息、权限信息、字符集信息、分区信息等。
  2. cluster:存储了系统的集群信息。
  3. mysql:存储了系统的用户权限信息。
  1. test:系统自动创建的测试数据库,任何用户都可以使用。

三. 选择数据库

  • 语法:use 数据库名;
mysql> use mzc-test;
  • 返回Database changed代表我们已经选择 sqltest 数据库,后续所有操作将在 sqltest 数据库上执行。

95bcb35d5acb40e98ef4d1d6f6d0c64d.png

  • 有些人可能会问到,连接以后怎么退出。其实,不用退出来,use 数据库后,使用show databases就能查询所有数据库,如果想跳到其他数据库,用use 其他数据库名字。

四. 查看数据库中的表


  • 语法:show tables;
mysql> show tables;


结果:

2f3976d4973f4f55b17f462ec15b72df.png

五. 删除数据库

  • 语法:drop database 数据库名称;
mysql> drop database mzc-test;

结果:

28cd147f278d465cb89cc5d9021d9ea6.png

  • 注意:删除时,最好用 `` 符号把表明括起来

六. 设置表的类型

  • MySQL的数据表类型:MyISAMInnoDB、HEAP、 BOB、CSV等

2181dae5b0a046cab1f8355ef81fa039.png

语法:

CREATE TABLE 表名(
  #省略代码
)ENGINE= InnoDB;

适用场景:

1. 使用MyISAM:节约空间及响应速度快;不需事务,空间小,以查询访问为主
2. 使用InnoDB:安全性,事务处理及多用户操作数据表;多删除、更新操作,安全性高,事务处理及并发控制
1. 查看mysql所支持的引擎类型

语法:

SHOW ENGINES

结果:

c99eb52469624d90939bb5f615173aa8.png

2. 查看默认引擎

语法:

SHOW VARIABLES LIKE 'storage_engine';


988a3bfc75b1473ca3dc197130b8cff7.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 SQL 关系型数据库
MySQL阅读网上MySQL文章有感的杂记
MySQL阅读网上MySQL文章有感的杂记
68 0
|
关系型数据库 MySQL Linux
让安装变简单:Linux下安装Mysql一篇文章搞定
让安装变简单:Linux下安装Mysql一篇文章搞定
163 0
|
8月前
|
SQL 关系型数据库 MySQL
一篇文章解析mysql的 行转列(7种方法) 和 列转行
一篇文章解析mysql的 行转列(7种方法) 和 列转行
2302 0
|
4月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
579 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
4月前
|
存储 缓存 关系型数据库
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
|
8月前
|
SQL 关系型数据库 MySQL
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
这篇文章带你了解:如何一次性将Centos中Mysql的数据快速导出!!!
|
8月前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
105 0
|
8月前
|
Cloud Native 关系型数据库 MySQL
AnalyticDB MySQL文章汇总
AnalyticDB MySQL文章汇总
88 0
|
SQL 存储 关系型数据库
MySQL的第一篇文章——了解数据库、简单的SQL语句
MySQL的第一篇文章——了解数据库、简单的SQL语句
|
SQL 关系型数据库 MySQL
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
116 0