销售型网站怎么做,桂林网站设计公司,yandex推广,wordpress 识别pc手机版文章目录 Ⅰ. 什么是数据库1、普通文件的缺点2、数据库的概念3、主流数据库4、MySQL Ⅱ. MySQL中客户端、服务端、数据库的关系Ⅲ. 见一见数据库1、数据库文件存放的位置2、创建数据库3、使用数据库4、创建数据库表结构5、表中插入数据6、查询表中数据7、数据的存储逻辑 #… 文章目录 Ⅰ. 什么是数据库1、普通文件的缺点2、数据库的概念3、主流数据库4、MySQL Ⅱ. MySQL中客户端、服务端、数据库的关系Ⅲ. 见一见数据库1、数据库文件存放的位置2、创建数据库3、使用数据库4、创建数据库表结构5、表中插入数据6、查询表中数据7、数据的存储逻辑 小总结 Ⅳ. 服务器、数据库、表之间的关系Ⅴ. MySQL体系架构1、体系架构总览2、连接层3、数据库服务层① Connection Pool连接池② Caches缓存③ Parser解析树④ Optimizer优化器⑤ SQL Interface接口⑥ Services Utilities系统管理和控制工具 4、存储引擎层如何在两种存储引擎中进行选择❓❓❓如何查看存储引擎 5、系统文件存储层① 数据文件② 日志文件③ 配置文件④ pid文件⑤ socket文件 Ⅵ. MySQL执行流程Ⅶ. SQL分类 Ⅰ. 什么是数据库
1、普通文件的缺点
存储数据用文件就可以了为什么还要弄个数据库❓❓❓
这就不得不提文件保存数据的以下几个缺点 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 什么意思呢比如说我们如果用普通文件作为数据库的话那么就会有访问控制、数据加密、完整性保护、备份和恢复、病毒和恶意软件等安全性问题的存在或者说此时有一大批数据比如说有几万条 IP 地址那么如果我们想筛选出以 192 开头的 IP 地址对于普通文件来说我们就得用编程语言去读取文件然后再依次判断每个 IP 地址是否符合要求这显然是有点挫
而上述问题有人就帮我们解决了专家们设计出更加利于管理数据的东西——数据库它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。
2、数据库的概念
数据库是一个 组织和存储数据的集合。它是一个 结构化 的数据存储系统用于管理和访问大量相关数据的集合。数据库可以存储各种类型的数据如文本、数字、图像、音频和视频等。
数据库的主要目的是 提供一种有效的方式来组织、存储和检索数据。它可以用于在各种应用程序和系统中存储和管理数据例如企业资源规划ERP系统、客户关系管理CRM系统、电子商务网站和社交媒体平台等。
数据库通常由一个或多个表组成每个表包含多个行和列。行表示数据的记录列表示数据的属性或字段。通过使用结构化查询语言SQL或其他查询语言可以对数据库进行查询、插入、更新和删除操作以满足特定的数据需求。
数据库的优点包括数据的集中管理、数据的一致性和完整性、数据的安全性和可靠性以及对大规模数据的高效处理能力。它们在许多领域中都得到广泛应用包括企业管理、科学研究、金融服务、医疗保健和物流等。
3、主流数据库
SQL Sever 微软的产品.Net程序员的最爱适合中大型项目。Oracle 甲骨文产品适合大型项目复杂的业务逻辑并发一般来说不如 MySQL。MySQL世界上最受欢迎的数据库属于甲骨文公司并发性好不适合做复杂的业务。主要用在电商SNS论坛。对简单的 SQL 处理效果好。PostgreSQL加州大学伯克利分校计算机系开发的关系型数据库不管是私用商用还是学术研究使用可以免费使用修改和分发。SQLite 是一款轻型的数据库是遵守 ACID 的关系型数据库管理系统它包含在一个相对小的 C 库中。它的设计目标是嵌入式的而且目前已经在很多嵌入式产品中使用了它它占用资源非常的低在嵌入式设备中可能只需要几百K的内存就够了。H2 是一个用 Java 开发的嵌入式数据库它本身只是一个类库可以直接嵌入到应用项目中。
4、MySQL
MySQL 是一种 开源的关系型数据库管理系统RDBMS它是最流行和广泛使用的数据库之一。MySQL 由瑞典公司 MySQL AB 开发并于 2000 年首次发布。现在 MySQL 由 Oracle 公司维护和支持。
MySQL使用结构化查询语言SQL作为其主要查询语言它允许用户创建、修改和管理数据库中的数据。MySQL 支持多种操作系统包括 Windows、Linux 和 macOS 等。
MySQL具有以下特点 可靠性MySQL被广泛用于大型企业和网站因为它具有高度可靠性和稳定性。它可以处理大量的并发连接和高负载。可扩展性MySQL支持水平和垂直扩展可以根据需求增加服务器的处理能力和存储容量。安全性MySQL提供了各种安全功能如用户认证、访问控制和数据加密等以保护数据库中的数据免受未经授权的访问和恶意攻击。灵活性MySQL支持多种存储引擎如InnoDB、MyISAM和 Memory 等每个存储引擎都有不同的特性和适用场景使用户可以根据需求选择合适的存储引擎。开源性MySQL是开源软件用户可以自由地使用、修改和分发它这使得它成为许多开发者和组织的首选数据库解决方案。 MySQL广泛应用于各种应用程序和系统包括 Web 应用程序、企业应用程序、电子商务网站和大数据分析等。它被许多知名公司和组织使用如 Facebook、Twitter、YouTube 和亚马逊等。
下面的学习我们都是围绕 MySQL 进行展开
Ⅱ. MySQL中客户端、服务端、数据库的关系
是不是很奇怪为什么我们在安装 mysql 服务的时候会有一个 mysqld 呢❓❓❓ 其实 mysql 是数据库服务的客户端而 mysqld 才是数据库服务的服务器端
也就说MySQL 的本质其实就是一种 C/S 模式的一种网络服务
我们还需要有其它的一些共识 mysql 是一套给我们 提供数据存取服务的网络程序数据库一般指的是在磁盘或者内存中存储的特定组织结构的数据也可以成为在磁盘或者内存中存储的一套 数据库方案也就是说磁盘上存储的文件不是普通的文件而是特定结构的数据文件 通过下图就能看出三者之间的关系 一般我们不仅仅称磁盘那部分为数据库还有人称整个系统都是数据库求同存异
所以在今后学习数据库的时候为了统一性这里来规定一下我们自己的说法 mysql表示数据库客户端。mysqld表示数据库服务端。数据库表示磁盘上存储的一套数据库文件。 Ⅲ. 见一见数据库
实践得真知下面我们给出一个样例 使用 mysql 建立一个数据库叫做 helloworld然后在该数据库中建立一张表结构 student在该表中插入一些数据最后就是对比一下 mysql 在 linux 中是如何体现的 1、数据库文件存放的位置 首先我们得先知道我们的 mysql 数据库文件都存放在哪里这可以在配置文件中看到 我们打开该路径看看 可以很明显的看到这些目录和我们使用服务端指令 show databases 中看到的数据库文件是一样的也就是说数据库文件本质就是一个目录
2、创建数据库
mysql create database helloworld; 此时可以看到如下效果 3、使用数据库
在操作库之前首先就需要选择操作哪个库
mysql use helloworld;4、创建数据库表结构
mysql create table student(- name varchar(32),- age int,- gender varchar(2)- ); 具体的类型我们后面会讲 可以得到结论所谓的 在数据库内创建表本质就是在数据库文件目录下创建对应的文件即可
5、表中插入数据
mysql insert into student (name, age, gender) values (lirendada, 20, 男);6、查询表中数据
mysql select * from student;
-------------------------
| name | age | gender |
-------------------------
| lirendada | 20 | 男 |
-------------------------
1 row in set (0.00 sec)7、数据的存储逻辑
数据库文件虽然是二进制文件但是它是有结构组织的当我们想要打印结果的时候其会按照行列式结构打印出来 小总结
建立数据库本质就是 linux 下创建的一个目录。在数据库中创建一张表本质就是在 linux 中的某个数据库目录下对应创建的文件。数据库本质也是文件只不过这些文件并不由程序员直接操作而是由数据库服务帮我们进行操作。
Ⅳ. 服务器、数据库、表之间的关系
所谓安装数据库服务器其实就是在机器上安装了一个数据库管理系统程序守护进程一直在后台运行着这个管理程序可以管理多个数据库一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据一般会在数据库中创建多个表以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下 Ⅴ. MySQL体系架构
1、体系架构总览 从架构图我们可以看出 MySQL 的架构自顶向下大致可以分为 连接层、数据库服务层、存储引擎层、系统文件层 四大部分。接下来我们就来简单说说每个部分的组成信息。
2、连接层 连接层位于整个 MySQL 体系架构的最上层主要担任客户端连接器的角色。提供与 MySQL 服务器建立连接的能力几乎支持所有主流的服务端语言例如Java、C、C、Python 等各语言都是通过各自的 API 接口与 MySQL 建立连接。
也就是我们使用的 mysql 客户端也可能是一些图形化的数据库客户端等等
3、数据库服务层 数据库服务层是整个数据库服务器的核心主要包括了系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存等部分。
① Connection Pool连接池
主要是负责存储和管理客户端与数据库的链接连接池里的一个线程负责管理一个客户端到数据库的连接信息。自从引入了连接池以后官方报道到连接数达到 128 后使用连接池与没有连接池的性能是提升了 n 倍反正就是性能大大的提升了。
连接建立完成后就可以执行 SQL 语句了。执行逻辑就会来到缓存模块。
② Caches缓存
MySQL的缓存是由一系列的小缓存组成的。例如MySQL的表缓存记录缓存MySQL中的权限缓存引擎缓存等。
当 MySQL 拿到一个查询请求后会先到查询缓存看看之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 键值对的形式被直接缓存在内存中。key 是查询的语句value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key那么这个 value 就会被直接返回给客户端。
如果语句不在查询缓存中就会继续后面的执行阶段。执行完成后执行结果会被存入查询缓存中。你可以看到如果查询命中缓存MySQL 不需要执行后面的复杂操作就可以直接返回结果这个效率会很高。 但是大多数情况下建议不要使用查询缓存为什么呢❓❓❓ 因为查询缓存往往弊大于利。查询缓存的失效非常频繁只要有对一个表的某一条数据更新这个表上所有的查询缓存都会被清空。 因此很可能你费劲地把结果存起来还没使用呢就被一个更新全清空了。对于更新压力大的数据库来说查询缓存的命中率会非常低。除非你的业务就是有一张静态表很长时间才会更新一次。 比如一个系统配置表那这张表上的查询才适合使用查询缓存。 好在 MySQL 也提供了这种“按需使用”的方式。你可以将参数 query_cache_type 设置成 DEMAND这样对于默认的 SQL 语句都不使用查询缓存。 注意MySQL 8.0 版本直接将查询缓存的整块功能删掉了标志着 MySQL 8.0 开始彻底没有缓存这个功能了。
③ Parser解析树
主要负责对请求的 SQL 解析成一棵 “解析树”然后根据 MySQL 中的一些规则对 “解析树” 做进一步的语法验证确认其是否合法。
注意如果没有命中查询缓存才会开始真正执行语句
步骤差不多如下所示 首先MySQL 需要知道你要做什么因此需要对 SQL 语句做解析。分析器先会做 “词法分析” 。你输入的是由多个字符串和空格组成的一条 SQL 语句MySQL 需要识别出里面的字符串分别是什么、代表什么。做完了词法分析以后就要做 “语法分析”。根据词法分析的结果语法分析器会根据语法规则判断你输入的这个 SQL 语句是否满足 MySQL 语法。 如果我们在拼写 SQL 语句的时候漏了某个字母或者某个关键字写错了就会收到 You have an error in your SQL syntax 的错误提醒如下所示
一般语法错误会提示第一个出现错误的位置所以你要关注的是紧接 “use near” 的内容。仅供参考有时候这个提示也不是非常靠谱
经过分析器对 SQL 进行了分析并且没有报错。那么此时就进入优化器中对 SQL 进行优化。
④ Optimizer优化器
在 MySQL 中如果 “解析树” 通过了解析器的语法检查此时就会由优化器将其转化为执行计划然后与存储引擎进行交互通过存储引擎与底层的数据文件进行交互。
简单地说优化器就是在我们的数据库表中如果存在多个索引的时候自动决定使用哪个索引或者当一个语句有多表关联的时候自动决定各个表的连接顺序 。 首先肯定是要判断权限就是有没有权限执行这条 SQL。工作中可能会对某些客户端进行权限控制。比如说生产环境中对于大部分开发人员都只开查询权限没有增删改权限部分小公司除外。如果有权限就打开表继续执行。打开表的时候执行器就会根据表的引擎定义去使用这个引擎提供的接口。 ⑤ SQL Interface接口
主要负责接收客户端发送过来的各种 SQL 命令并将 SQL 命令发送到其他部分并接收其他部分返回的结果数据将结果数据返回给客户端。
⑥ Services Utilities系统管理和控制工具
提供数据库系统的管理和控制功能例如对数据库中的数据进行**备份和恢复保证整个数据库的安全性提供安全管理对整个数据库的集群进行协调和管理**等。
4、存储引擎层 存储引擎的概念是 MySQL 里面才有的不是所有的关系型数据库都有存储引擎这个概念 。
存储引擎就是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。也就是说其实所有的 底层工作就是由存储引擎帮我们干的而上层的其它服务都只是对存储引擎进行选择和调用
因为 在关系数据库中数据的存储是以表的形式存储的所以存储引擎也可以称为表类型Table Type即存储和操作此表的类型。
MySQL 中的存储引擎层主要负责数据的写入和读取与底层的文件进行交互。值得一提的是MySQL 中的存储引擎是插件式的服务器中的查询执行引擎通过相关的接口与存储引擎进行通信同时接口屏蔽了不同存储引擎之间的差异。 MySQL5.5 版本以前默认使用的存储引擎是 MyISAM 。MySQL5.5 版本以后默认使用的存储引擎是 InnoDB 。 下面对部分相对使用多的引擎进行一个对比 在实际项目中大多数使用 InnoDB然后是 MyISAM至于其他存储引擎使用的非常至少。
两个主要原因第一个原因是 MyISAM 是表级锁定限制了数据库读/写的性能另外一个原因是 MyISAM 不支持事务基于以上两点InnoDB 引擎可以到行。 MyISAM 与 InnoDB 引擎的区别 事务支持InnoDB 引擎支持事务处理可以使用 ACID原子性、一致性、隔离性和持久性属性来确保数据的完整性和一致性。而 MyISAM 引擎不支持事务处理。锁定级别InnoDB 引擎支持行级锁定这意味着在并发访问时只锁定需要修改的行而不是整个表。这提高了并发性能。而 MyISAM 引擎只支持表级锁定这意味着在并发访问时需要锁定整个表可能导致性能瓶颈。外键支持InnoDB 引擎支持外键约束可以确保数据的完整性和一致性。而 MyISAM 引擎不支持外键约束。全文索引InnoDB 引擎从 MySQL 5.6 版本开始支持全文索引。而 MyISAM 引擎一直支持全文索引。崩溃恢复InnoDB 引擎具有崩溃恢复能力可以在数据库崩溃后自动恢复数据。而 MyISAM 引擎在崩溃后可能需要手动修复表。性能特点对于大量的读操作和稳定的查询MyISAM 引擎通常具有更好的性能。而对于大量的写操作、事务处理和并发访问InnoDB 引擎通常具有更好的性能。 如何在两种存储引擎中进行选择❓❓❓
① 是否有事务操作有InnoDB。
② 是否存储并发修改有InnoDB。
③ 是否追求快速查询且数据修改较少是MyISAM。
④ 是否使用全文索引如果不引用第三方框架可以选择 MyISAM但是可以选用第三方框架和 InnDB 效率会更高
如何查看存储引擎
我们可以直接通过下面指令查看当前 mysql 中的存储引擎
show engines5、系统文件存储层 系统文件存储层主要是 负责将数据库的数据和日志存储在系统的文件中同时完成与存储引擎的之间的打交道是文件的物理存储层。其存储的文件主要有日志文件、数据文件、配置文件、MySQL 的进行 pid 文件和 socket 文件等。
① 数据文件 db.opt 文件记录当前数据库的默认使用的字符集和校验规则。 frm文件存储数据表的结构信息主要是数据表相关的元数据信息包括数据表的表结构定义信息每张表都会有一个frm文件。 值得注意的是MySQL8 版本中的 innodb 存储引擎的表没有 frm 文件。 MYD文件MyISAM 存储引擎专用的文件格式主要存放 MyISAM 存储引擎数据表中的数据每张 MyISAM 存储引擎表对应一个 .MYD 文件。 MYI文件MyISAM 存储引擎专用的文件格式主要存放与 MyISAM 存储引擎数据表相关的索引信息每张 MyISAM 存储引擎表对应一个 .MYI 文件。 ibd文件存放 Innodb 存储引擎的数据文件和索引文件主要存放的是独享表空间的数据和索引每张表对应一个 .ibd 文件。 ibdata文件存放 Innodb 存储引擎的数据文件和索引文件主要存放的是共享表空间的数据和索引所有表共用一个或者多个.ibdata 文件可以根据配置来指定共用的 .ibdata 文件个数。 ibdata1 文件系统表空间数据文件主要存储 MySQL 的数据表元数据、Undo 日志等信息。 ib_logfile0 和 ib_logfile1 文件数据库中的 Redo log 文件主要用于 MySQL 实现事务的持久性。如果在某个时间点 MySQL 发生了故障此时如果有脏页没有写入到数据库的 ibd 文件中在重启 MySQL 的时候MySQL 会根据 Redo Log 信息进行重做将写入 Redo Log 并且尚未写入数据表的数据进行持久化操作。
② 日志文件 错误日志 主要存储的是 MySQL 运行过程中产生的错误信息。 show variables like %log_error%;通用查询日志 主要记录 MySQL 运行过程中的一般查询信息。 show variables like %general%;二进制日志 主要记录对 MySQL 数据库执行的插入、修改和删除操作并且也会记录 SQL 语句执行的时间、执行的时长但是二进制日志不记录 select、show 等不修改数据库的 SQL。主要用于恢复数据库的数据和实现 MySQL 主从复制。 查看二进制日志是否开启 show variables like %log_bin%;查看二进制日志的参数 show variables like %binlog%查看日志文件 show binary logs;慢查询日志 慢查询主要记录的是执行时间超过指定时间的 SQL 语句这个时间默认是 10 秒。 查看是否开启慢查询日志 show variables like %slow_query%;查看慢查询设置的时长 show variables like %long_query_time%③ 配置文件
用于存在 MySQL 所有的配置信息在 Unix/Linux 环境中是 my.cnf 文件在 Windows 环境中是 my.ini 文件。
④ pid文件
pid 文件是 mysqld 应用程序在 Linux 和 Unix 操作系统下才有的的一个进程文件和许多其他 Linux 或者 Unix 服务端程序一样该文件 放着自己的进程 id。
⑤ socket文件
socket 文件也是 Linux/Unix 操作系统下才有的用户在 Linux/Unix 操作系统下客户端连接可以不通过 TCP/IP 网络而直接使用 Unix socket 来连接 MySQL 数据库。
Ⅵ. MySQL执行流程 Ⅶ. SQL分类
DDL【data definition language】 数据定义语言用来 维护存储数据的结构如创建数据库、创建表结构等代表指令如 create、drop、alter 等。DML【data manipulation language】 数据操纵语言用来 对数据进行操作如增删改等。代表指令如 insert、delete、update 等。 DML 中又单独分了一个 DQL数据查询语言用来对数据进行查询代表指令如 select。 DCL【Data Control Language】 数据控制语言主要 负责权限管理和事务。代表指令如 grant、revoke、commit 等。