文章目录
前言
在当今信息化时代,数据的存储与管理成为各行各业的核心需求,而数据库作为数据管理的中枢工具,扮演着不可或缺的角色。MySQL作为一种流行的关系型数据库管理系统,以其开源、免费、性能稳定等优势广泛应用于各类项目开发中。如果你是数据库新手,或是想进一步巩固基础知识,本博文将带你从零开始,逐步掌握MySQL的基础概念与常用操作。
🧩1. 什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它起源于20世纪50年代中期,随着计算机技术和信息技术的发展而不断发展。数据库通常用于存储和管理大量的数据,这些数据可以是结构化的,也可以是非结构化的。
1.1 数据库的主要特点
- 数据组织性:数据库中的数据不是杂乱无章的,而是按照一定的数据模型组织起来的,这使得数据易于理解、使用和管理。
- 数据共享性:数据库中的数据可以被多个用户、多个应用程序共享,从而实现数据资源的高效利用。
- 数据独立性:数据库中的数据与应用程序之间是相互独立的。数据的存储结构或存取方法等改变时,应用程序不必修改。数据的逻辑结构改变时,可以局部修改应用程序,而不需要大量重写程序。
- 数据冗余度可控性:数据库系统通过数据模型和数据控制机制,可以有效地控制数据的冗余度,从而提高数据的存储效率和一致性。
- 数据安全性:数据库系统通过权限控制、数据加密等手段,确保数据的安全性和保密性。
- 数据完整性:数据库系统通过完整性约束、触发器等手段,确保数据的完整性和一致性,防止数据被非法修改或破坏。
1.2
mysqld
和
mysql
的区别
mysqld和mysql都是MySQL数据库管理系统中的关键组件,但它们各自承担着不同的角色和功能。
mysqld是MySQL数据库的核心服务器进程,也可以理解为MySQL服务器的实际运行程序。它负责监听和处理来自客户端的连接请求,执行SQL语句,管理数据库和表结构,以及处理事务和并发控制等核心功能。mysqld具有高性能、可靠性和可扩展性,支持多线程处理,能够处理大量的并发请求,并提供了丰富的功能和功能扩展,如存储过程、触发器、复制、集群等。它是MySQL数据库能够正常运行的关键所在。
而mysql则通常指的是MySQL数据库的客户端命令行工具,用于与MySQL服务器进行交互并执行数据库管理任务。mysql提供了一种方便的方式来执行各种数据库操作,如创建数据库、创建表、插入数据、查询数据等。它使得开发人员可以轻松地通过命令行界面或脚本与MySQL服务器进行交互,进行数据库的管理和操作。
简而言之,mysqld是MySQL数据库的服务器端组件,负责实际的数据存储和操作;而mysql则是MySQL数据库的客户端组件,提供了与服务器进行交互的接口和工具。这两者在MySQL数据库管理系统中相互协作,共同实现了数据的存储、管理和操作功能。
🧩2. 主流数据库
主流数据库根据其设计架构、数据类型和应用场景的不同,可以分为多种类型。以下是对几种主流数据库的详细介绍:
2.1 关系型数据库
关系型数据库是市场上最为常见和广泛使用的数据库类型之一。它以二维表格的形式存储数据,每一行代表一条记录,每一列代表一个字段。关系型数据库支持SQL(结构化查询语言)进行数据操作和查询。
- Oracle:由Oracle公司开发的关系型数据库管理系统,广泛应用于企业级应用程序和大型系统中。它提供了强大的查询能力、事务处理能力、数据完整性保证和数据安全保证。
- MySQL:一种开源的关系型数据库管理系统,适用于网站和互联网应用。MySQL提供了灵活的数据模型、高效的数据存取、高速的数据缓存、高容错的数据分布和高可扩展的数据架构。
- Microsoft SQL Server:由微软公司开发的关系型数据库管理系统,主要运行在Windows平台上。它提供了丰富的数据类型、多种数据分析工具、易用的数据管理界面和集成的数据安全机制。
- PostgreSQL:开源的对象关系型数据库管理系统,支持多种操作系统和编程语言。PostgreSQL提供了高级的数据功能、多种数据扩展选项、兼容的数据标准和开放的数据社区。
2.2 非关系型数据库(NoSQL)
非关系型数据库是一种不需要固定结构的数据库,适用于处理大数据和实时Web应用。它不使用关系模型来组织和存储数据,而是采用键值对、文档、列族或图形等形式存储数据。
- MongoDB:一种开源的非关系型数据库管理系统,使用文档模型存储数据。MongoDB提供了灵活的数据结构、快速的数据查询、动态的数据更新、自动的数据分片和复制功能。
- Redis:开源的非关系型数据库管理系统,使用键值对存储数据,并提供高速缓存和消息队列功能。Redis具有高性能和高可用性的特点,适用于高性能和实时的数据应用场景。
- Cassandra:开源的非关系型数据库管理系统,使用列族模型存储数据。Cassandra提供了高可用性和可扩展性,适用于海量和分布式的数据应用场景。
- Neo4j:开源的非关系型数据库管理系统,使用图模型存储数据,并支持复杂的图查询。Neo4j适用于存储和分析具有复杂关系的数据,如社交网络、推荐系统和知识图谱等。
2.3 其他类型数据库
除了关系型数据库和非关系型数据库外,还有其他一些类型的数据库也在市场上占据一定的份额。
- 对象数据库:一种将复杂对象存储到数据库中的技术。对象数据库能够直接支持各种复杂的对象,如时间、地理信息、金融交易等。
- 分布式数据库:通过网络连接的多个数据库系统,这些系统在物理上分布在不同的地方,但在逻辑上看起来像一个整体。分布式数据库提供了高可用性和高性能。
- 云数据库:运行在云计算平台上的数据库,用户可以通过网络访问和管理。云数据库具有低成本和高可用性的特点。
🧩3. 基本使用(重点)
MySQL是一个流行的关系型数据库管理系统(DBMS),它使用结构化查询语言(SQL)进行数据管理。以下是MySQL的基本使用方法:
3.1 安装与配置
- 下载与安装:- 可以从MySQL官方网站或其他可信的软件下载平台获取MySQL的安装包。- 根据操作系统类型(如Windows、Linux等)选择相应的安装包,并按照安装向导的提示进行安装。
- 配置:- 在安装过程中,可能需要配置MySQL的服务器参数,如端口号、字符集等。- 安装完成后,可以启动MySQL服务,并登录到MySQL命令行客户端或图形化管理工具(如phpMyAdmin)进行进一步配置。
3.2 数据库操作
- 创建数据库
createdatabase testdb;createdatabase testdb characterset utf8mb4 collate utf8mb4_unicode_ci;
- 查看数据库列表
showdatabases;
- 选择数据库
use testdb;
- 删除数据库
dropdatabase testdb;
3.3 表操作
- 创建表
createtable students (
id intauto_incrementprimarykey,
name varchar(100)notnull,
age int,
gender enum('male','female'));
- 查看表结构
describe students;desc students;
- 查看当前数据库中的表
showtables;
- 删除表
droptableifexists students;
3.4 数据操作
- 插入数据
insertinto students (name, age, gender)values('alice',20,'female');
- 查询数据
select*from students;-- 查询所有记录 select name, age from students;-- 查询特定列的数据
- 更新数据
update students set age =21where name ='alice';
- 删除数据
deletefrom students where name ='alice';
🧩4.
MySQL
架构
MySQL的架构可以分为几个关键组成部分,这些部分共同协作以提供高效、可靠的数据库服务。以下是MySQL架构的详细解析:
4.1 总体架构
MySQL是一个典型的C/S(客户端/服务器)架构应用程序。MySQL Server服务程序(MySqld)提供数据库服务,完成客户端的请求和操作回馈。Client则负责提供连接数据库Server和命令操作等。
4.2 详细架构
MySQL架构自顶向下大致可以分为以下四层:
- 客户端(网络连接层)- 包含连接处理、用户认证、用户鉴权、客户端连接器(Client Connectors)等功能。- 连接处理:当一个客户端向服务端发送连接请求后,MySQL Server会从线程池中分配一个线程来和客户端进行连接,以后该客户端的请求都会被分配到该线程上。MySQL Server为了提高性能,提供了线程池,减少了创建线程和释放线程所花费的时间。- 用户认证:MySQL认证依据是用户名、客户端主机地址和用户密码。- 用户鉴权:当客户连接到MySQL Server后,MySQL Server会根据用户的权限来判断用户具体可执行哪些操作。- 客户端连接器(Client Connectors):提供与MySQL服务器建立的支持,目前几乎支持所有主流的服务端编程技术,例如常见的Java、C、Python、.NET等,它们通过各自API技术与MySQL建立连接。
- 服务层(MySQL Server)- 是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分。- 系统管理和控制工具(Management Services&Utilities):例如备份恢复、安全管理(如用户及权限管理)、集群管理等。- 连接池(Connection Pool):管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求。可以设定连接的最大数量,防止因为过多的数据库连接导致服务器资源耗尽。当数据库服务器负载过高时,通过连接池的限制可以避免过多的连接请求对数据库造成影响,保证了数据库的稳定运行。- SQL接口(SQL Interface):是整个数据系统与用户进行交互的关键部分,负责接收并处理用户的SQL命令,同时也负责向用户提供查询结果。- 解析器(Parser):SQL命令传递到解析器的时候会被解析器验证和解析。解析器首先会对SQL语句进行词法分析,提取关键字、表名、列名、运算符等组成部分,然后进行语法验证,判断输入的SQL语句是否符合MySQL的语法规则。如果SQL语句在语法上是合法的,解析器会将这些组成部分转化为MySQL服务器内部使用的数据结构,为后续的操作(如查询优化和执行)提供基础。此外,解析器还可能进行语义分析,例如检查引用的表和列是否存在、检查权限等。- 查询优化器(Optimizer):负责优化SQL查询的执行计划,以提高性能和效率。查询优化器通过分析查询语句、数据库结构和索引等信息,生成最优的执行计划。它选择不同的查询执行策略,如选择最合适的索引、确定连接顺序等,以便高效地检索数据并返回查询结果。- 缓存(Caches&Buffers):如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。不过,从MySQL 8.0版本开始,已经删除了查询缓存的功能,因为官方认为该功能在实际的应用场景比较少。
- 存储引擎层(Pluggable Storage Engines)- 是MySQL架构中最具特色的部分之一。MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,这些存储引擎都有各自的特点和适用场景。- 存储引擎是MySQL中具体的与文件打交道的子系统,它根据MySQL AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)。- InnoDB是MySQL的默认存储引擎,它支持事务、行级锁定、多版本并发控制(MVCC)等高级功能,适用于需要高可靠性和高性能的应用场景。- MyISAM是MySQL早期版本的默认存储引擎,它不支持事务和行级锁定,但具有较快的查询速度,适用于读多写少的应用场景。
- 系统文件层(File System)- 这一层主要负责数据的物理存储和读取,与底层硬件和操作系统紧密相关。MySQL将数据存储在磁盘上的文件系统中,通过存储引擎层提供的接口与这些文件进行交互。
4.3 关键组件详解
- 连接器- 主要负责用户登录数据库,进行用户的身份认证(包括校验账户密码、权限等操作),如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限。后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的(注意:MySQL 8.0 版本后,连接器的相关功能有所调整或移除)。
- 查询缓存- 主要用来缓存所执行的SELECT语句以及该语句的结果集。连接建立后,执行查询语句时,会先查询缓存。MySQL会先校验这个SQL是否执行过,以Key-Value的形式缓存在内存中(Key是查询语句,Value是结果集)。如果缓存key被命中,就会直接返回给客户端;如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。不过,由于查询缓存失效在实际业务场景中可能会非常频繁(例如,对一个表进行更新操作后,该表上的所有查询缓存都会被清空),因此MySQL 8.0版本后已经删除了查询缓存的功能。
- 分析器- 如果MySQL没有命中缓存,那么就会进入分析器。分析器的主要作用是对SQL语句进行分析和解析,以便为后续的执行和优化提供必要的信息。分析器的工作流程通常包括词法分析和语法分析两个步骤。
- 优化器- 优化器的作用是根据分析器提供的信息,生成最优的执行计划,以提高查询性能和效率。优化器会考虑多种因素,如索引的选择、连接顺序的确定等,以生成最优的执行计划。在执行计划生成后,MySQL就可以按照该计划执行查询操作了。
- 执行器- 执行器是MySQL架构中负责执行查询操作的组件。它会根据优化器生成的执行计划,调用相应的存储引擎接口来执行查询操作,并返回查询结果给用户。在执行过程中,执行器还会负责处理各种异常情况,如权限不足、表不存在等。
综上所述,MySQL的架构是一个高度模块化和可扩展的架构,各个组件之间通过清晰的接口进行交互和协作。这种架构使得MySQL能够灵活地适应不同的应用场景和需求,同时也为开发者提供了丰富的功能和选项来优化数据库的性能和可靠性。
🧩5.
SQL
分类
5.1
DDL
(Data Definition Language,数据定义语言)
- create:用于创建数据库对象,如创建表、视图、索引等。
createtable students (id int, name varchar(50));
- alter:用于修改数据库对象的结构,如修改表结构、添加、修改、删除列等。
altertable students addcolumn age int;
- drop:用于删除数据库对象,如删除表、视图、索引等。
droptable students;
5.2
DML
(Data Manipulation Language,数据操作语言)
- insert:用于插入数据到表中。
insertinto students (id, name, age)values(1,'alice',20);
- update:用于更新表中的数据。
update students set age =21where id =1;
- delete:用于删除表中的数据。
deletefrom students where id =1;
5.3
DQL
(Data Query Language,数据查询语言)
dql的主要语句是select,用于从数据库中检索数据。
select*from students where age >18;
5.4
DCL
(Data Control Language,数据控制语言)
- grant:用于授予用户或角色访问权限。
grantselecton students to user1;
- revoke:用于撤销用户或角色的访问权限。
revokeselecton students from user1;
- commit:用于提交一个事务,确保事务中的所有操作都被永久保存到数据库中。
commit;
- rollback:用于回滚一个事务,撤销事务中的所有操作,使数据库恢复到事务开始前的状态。
rollback;
在实际应用中,SQL语句的大小写通常不会影响其执行,因为SQL是不区分大小写的。然而,为了代码的可读性和一致性,许多开发者和团队会选择遵循一定的命名规范,比如将关键字大写,表名和列名小写,或者使用驼峰命名法等。
🧩6. 存储引擎
存储引擎是指数据库底层用于存储、处理和检索数据的软件组件。它是数据库管理系统(DBMS)的核心部分,决定了数据库系统的性能、特性和功能。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,以满足不同应用场景的需求。
以下是一些常见的数据库存储引擎及其特点:
- InnoDB:- InnoDB是MySQL的默认存储引擎,支持事务安全表(ACID),具有行级锁定和外键约束等特性。- 它基于多版本并发控制(MVCC)实现,允许多个事务同时访问同一数据而不会相互干扰。- InnoDB还提供了崩溃修复和并发控制的功能,非常适合对事务完整性要求较高的应用场景,如银行系统和电商系统的订单处理等。
- MyISAM:- MyISAM是MySQL的另一种常见存储引擎,它是ISAM存储引擎的扩展版本。- MyISAM具有较高的插入和查询速度,但不支持事务和外键。- 它适用于读操作和插入操作为主、更新和删除操作较少的应用场景,如电商系统中的用户评价和足迹信息等。
- MEMORY:- MEMORY存储引擎将数据存储在内存中,为查询和引用其他表数据提供快速访问。- 由于数据存储在内存中,MEMORY引擎的处理速度非常快,但安全性不高,且数据在服务器重启时会丢失。- 它适用于需要快速读写速度且对数据安全性要求不高的应用场景,如临时数据存储和缓存等。
- Archive:- Archive存储引擎主要用于数据归档和备份。- 它支持高压缩比的存储,适合存储大量历史数据。- Archive引擎不支持事务和外键,也不支持索引,因此查询性能较低。
- 其他存储引擎:- 除了上述常见的存储引擎外,还有一些其他存储引擎可供选择,如NDB(用于分布式数据库)、FEDERATED(用于访问远程数据库表)、BLACKHOLE(用于丢弃数据)等。
在选择存储引擎时,应根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合,以充分利用各存储引擎的优势。同时,也需要注意存储引擎的兼容性和性能表现,以确保数据库系统的稳定性和高效性。
结语
通过本篇博文的学习,相信你已经掌握了MySQL的基本操作与概念。无论是在开发项目中,还是在数据管理工作中,熟练使用MySQL都能大大提升你的效率与能力。希望你能继续深入学习,并在实际应用中不断积累经验,逐步掌握更为高级的数据库技能。
今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,17的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是17前进的动力!
版权归原作者 .17. 所有, 如有侵权,请联系我们删除。