create database if not exists bilibili; #创建数据库bilibili use bilibili; #选择bilibili数据库,即可进行下面的代码演示 drop database if exists bilibili; #代码演示结束后删除bilibili数据库。这个小文件全部代码演示完再删 show databases; #查看是否删除完成

 

MySQL体系结构

 

可以连接MySQL服务器的客户端 Native C API、JDBC(用于Java连接数据库)、ODBC、.NET、PHP、Perl、Python、Ruby、Cobol

 

MySQL服务器端的体系结构是分层的 第一层:连接层。接收来自客户端的连接,完成连接的处理以及认证授权的操作,检查是否超过最大连接数 第二层:服务层。核心功能,例如SQL接口、查询解析器、查询优化器、缓存,还有跨存储引擎的实现也是在服务层 第三层:存储引擎层。可在原有引擎的基础上扩展新的引擎,采用的是可插拔存储引擎,用就插不用就拔,负责数据存储和提取 第四层:存储层。控制数据库的数据如何存(包括一系列日志)、如何取、如何组织。具体的数据库中的数据最终是存储在磁盘中的

 

重点讲一下第三层 存储引擎层的引擎有:InnoDB、MyISAM、NDB、Archive、Federated、Memory、Merge、Partner、Community、Custom、... 存储引擎层的实现有:Memory、Index(也就是索引,不同存储引擎的索引结构不同)、Storage Management MySQL5.5版本之后默认的存储引擎是InnoDB MySQL早期的存储引擎是MyISAM Memory存储引擎的数据是存储在内存中的,通常用来做临时表缓存

 

 

存储引擎简介

 

如何知道我们在之前创建表时的存储引擎

上面那行会查询到我们对这张表的建表语句,包括表结构、数据、字符集、排序方式、注释信息。如下 1、ENGINE=InnoDB,即该表的默认存储引擎为InnoDB 2、AUTO_INCREMENT=下一次id ,注意如果没有设置自增的话,就不会有这行关键字 3、DEFAULT CHARSET=utf8mb4,即该表的默认字符集是utf8mb4 4、COLLATE=utf8mb4_0900_ai_ci,即该表的排序方式 5、COMMENT='表的注释'

如何在创建表时指定存储引擎,例如指定表的存储引擎为innodb

 

如何知道在当前MySQL数据库中,到底支持哪些存储引擎,以及各个存储引擎的特点

 

上面那行查询到的是引擎、是否支持、注释、事务、协议、保存点。如下 1、Engine,指的是所有引擎 2、Support,指的是当前MySQL数据库否支持该引擎 3、Comment,指的是引擎的注释 4、Transactions,指的是当前引擎是否支持事务 5、XA,指的是当前引擎是否支持协议 6、Savepoints,指的是当前引擎是否支持保存点

 

 

-- 1. 创建表 my_myisam,并指定存储引擎为MyISAM

 

验证:右键右边创建好的my_myisam表,点击Go to DDL,即可查看建表语句,其中可看到engine=MyISAM就说明该表的存储引擎指定成功

如果上面那行的验证找不到,就右键右边创建好的my_myisam表,点击Edit Source,效果跟上面那行一样

如果实在找不到。则可以双击右边的my_myisam表,点击上面的DDL,即可查看建表语句,效果一样

 

 

-- 2. 创建表 my_memory,并指定存储引擎为Memory

 

 

-- 3. 创建表 my_innodb,并指定存储引擎为InnoDB

 

验证:右键右边创建好的my_memory表,点击Go to DDL,即可查看建表语句,其中可看到engine=Memory就说明该表的存储引擎指定成功

如果上面那行的验证找不到,就右键右边创建好的my_memory表,点击Edit Source,效果跟上面那行一样

如果实在找不到。则可以双击右边的my_memory表,点击上面的DDL,即可查看建表语句,效果一样

 

 

InnoDB存储引擎

 

InnoDB存储引擎

 

介绍 InnoDB是一种兼顾可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎

 

特点 1、DML操作遵循ACID模型,支持事务; DML操作的是数据的更删改; ACID是数据的四大特性,即原子性、一致性、隔离性、持久性 2、行级锁,提高并发访问性能; 3、支持外键foreign key约束,保证数据的完整性和正确性;

 

文件 xxx.ibd: xxx代表的是表名,InnoDB引擎的每张表都会对应这样一个表空间文件(xxx.ibd),存储该表的表结构(frm、sdi)、 数据和索引。

 

参数:innodb_file_per_table 参数是决定多张表共用一个共享表空间,还是每张个表都对应一个表空间文件 在MySQL8.0版本中,这个开关是打开的,即代表每一张表都对应一个表空间文件

 

逻辑存储结构

1、TableSpece:表空间。存放例如ibd后缀的文件 在一个表空间中会包含若干个Segment段

2、Segment:段。在一个Segment段中包含若干个Extent区

3、Extent:区。一个区包含若干个Page页。一个Extent区的大小是固定的,为1M。一个区中包含64个页

4、Page:页,有数据页、索引页。一个Page页包含若干个Row行。是磁盘操作的最小单。一个Page页的大小是固定的,为16K

5、Row:行。行就是我们存储在表里面具体的一行行的数据。一个Row行包含如下 (1)Trx id:最后一次操作事务的id (2)Roll pointer:指针 (3)col1:字段1 (4)col2:字段2 (5)col3:字段3 (6)......

 

-- 如何查看系统变量。like是模糊匹配的意思

 

#如何打开MySQL的数据存放目录,即ibd后缀的文件,注意该文件找到之后是打不开的,因为该文件是以二进制的形式存储的

 

#如何查看ibd后缀的文件,注意只有先创建引擎为InnoDB的表,才能找到这种文件哦 #进入上述路径,找到ibd文件,点击上方路径导航栏,输入cmd,回车,输入: ibd2sdi my_innodb.ibd。回车就会得到json数据 #表示从idb文件中提取sdi表结构数据。上面那行的my_innodb.ibd中的my_innodb是你的表名,即my_innodb替换成你的表名

 

 

MyISAM存储引擎

 

MyISAM存储引擎

 

介绍 MyISAM是MySQL早期的默认存储引擎

 

特点

1、不支持事务,不支持外键

2、支持表锁,不支持行锁

3、访问速度快

 

文件

1、后缀为MYD:存放表的具体数据

2、后缀为MYI:存放表的索引

3、后缀为sdi:存放表结构信息

 

#注意只有先创建引擎为MyISAM的表,才能找到这种文件哦 #如何找到并打开打开上述后缀的文件,注意sdi后缀的文件是可以文本形式打开的,sdi后缀的文件存放的是json格式的数据, #把这些json数据复制下来,打开浏览器的json.cn网址,即可粘贴格式化,看到我们能看懂的数据

 

 

Memory存储引擎

 

Memory存储引擎

 

介绍 Memory引擎的表数据是存储在内存中的,由于受到硬件问题、或断电问题的影响, 只能作为临时表或缓存使用

 

特点

1、由于数据存放在内存,所以访问速度快

2、支持hash索引(默认)

 

文件

1、xxx.sdi:存储表结构信息

 

#注意只有先创建引擎为Memory的表,才能找到这种文件哦 #如何找到并打开打开上述后缀的文件,注意sdi后缀的文件是可以文本形式打开的,sdi后缀的文件存放的是json格式的数据, #把这些json数据复制下来,打开浏览器的json.cn网址,即可粘贴格式化,看到我们能看懂的数据

 

 

区分InnoDB、MyISAM、Memory存储引擎

 

存储引擎特点

特点InnoDBMyISAMMemory
存储限制64TB
事务安全支持//
锁机制行锁表锁表锁
B+tree索引支持支持支持
Hash索引//支持
全文索引支持(5.6版本后)支持/
空间使用N/A
内存使用中等
批量插入速度
支持外键支持//

 

存储引擎没有好坏之分,只需要在合适的业务场景选择合适的存储引擎 在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合

 

1、InnoDB: 是MySQL的默认存储引擎,支持事务、外键。如果应用对事务的完整性有较高的要求,在并发条件下要求数据的一致性,数据 操作除了插入和查询之外,还包含很多的更新、删除 操作,那么InnoDB存储引擎是比较合适的选择

 

2、MyISAM: 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这 个存储引擎是非常合适的,例如日志数据、足迹数据、评论数据,可以偶尔丢一两条数据。目前被MongoDB代替了

 

3、MEMORY: 将所有数据保存在内存中,访问速度快,通常用于临时表及存储。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓 存在内存中,而且无法保障数据的安全性。目前被Redis替代了

 

 

下一节课是'MySQL安装(linux版本)',我搞了3小时,其中MySQL安装包上传至linux,就用了一个小时。我的linux是CentOS9,安装时遇到了很多问题

我把解决方法的链接写到下面了,各位记得去试试。别忘了先百度一下怎么关闭linux的防火墙,然后再去搜下面的链接

1、把除最后一个安装包外的其他安装包都强制安装一次,留出最后那个别安装,看一下报错信息,结合如下链接这篇文章即可搞定安装,

https://www.pudn.com/news/6228c65e9ddf223e1ad05d81.html

2、能启动MySQL之后,输入mysql -u root -p报错,那么请看下面这篇文章来解决

https://www.bughz.com/forum/content-c44c6ec11f594f25ac8334ca07632853-7c3dba11a37f471697b1cad3434141a4-1-1

3、能mysql -u root -p之后,输入密码那里报错了,原因:MySQL已经为我们创建好了密码,我们需要到日志里面查看正确密码,输入如下命令

grep 'temporary password' /var/log/mysqld.log

4、登录进去,然后就自定义密码,首先把密码等级改为0,密码长度改为6,如下面两行命令

set global validate_password.policy = 0;

set global validate_password.length = 4;

5、再设置密码为123456

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

6、创建用户并给与全部权限,用于远程连接,例如我们正在记笔记的软件--datagrip,以后就可以直接用datagrip连接我们linux版MySQL数据库

create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

grant all on . to 'root'@'%';

 

下节课不见不散,这点困难怎么足以让强大的你倒下