【MySQL】数据库基础
【MySQL】数据库基础目录前言1.连接mysql的命令2.mysqlmysqladminmysqld3.什么是数据库优点4.见一见MySQL数据库的使用5.数据库分类5.1 关系型数据库5.2 非关系型数据库6.主流数据库对比7.为什么MySQL数据库这么受欢迎8.服务器数据库表之间的关系9.MySQL架构9.1.MySQL逻辑模块组成10.SQL语句分类11.存储引擎12.DDLDMLACID前言1.什么是数据库MySQL是世界上最受欢迎的开源数据库软件。那么我们常常听到的数据库到底是什么呢第二次世界大战后美军为有效管理大量资料将所有信息集中在一个基地中这个集中存储信息的基地被称为数据库database“该词由此诞生。现代意义上的数据库是指遵循特定规则组织的数据集合”但通常默认包含数据管理功能即具备对数据进行添加、查询、提取等操作的能力。因此单纯堆积的数据集合不能称为数据库必须拥有有效管理和运用这些数据的功能体系才能称之为真正的数据库。2. 关系型数据库是什么现在应用最广泛的数据库是关系数据库Relational DatabaseRDB。在关系数据库中一条数据通过多个属性字段来表征。例如存储会员信息时系统会将每条数据拆解为会员编号、姓名、住址、出生年月日等结构化字段最终整合所有会员数据形成完整的数据集。其核心概念包含记录Record表示完整的数据实体如某位会员的全部信息列Column定义数据属性字段如会员编号、姓名等表Table由同类记录组成的二维数据结构类比Excel工作表更容易理解表格中的每一行对应一条记录每一列存储同类型数据如所有会员的出生日期。值得注意的是单个数据库可以包含多个相互关联的表通过这种结构化设计实现高效数据管理。管理关系数据库的系统称为RDBMSRelational Database Management System关系数据库管理系统MySQL正是典型的RDBMS。其理论基础源自IBM科学家埃德加·弗兰克·科德Edgar F. Codd于1970年发表的划时代论文《A Relational Model of Data for Large Shared Data Banks》该论文奠定了现代关系型数据库的架构原则。RDBMS的核心设计优势数据规范化存储无需将所有字段堆积在单一表中而是通过范式化设计将数据拆分到多个逻辑关联的表中例如将会员信息、订单记录分表存储有效消除冗余数据。动态关联整合通过主键Primary Key与外键Foreign Key建立表间关联仅在需要时通过关联查询动态提取跨表数据如同时获取会员信息及其历史订单。操作安全高效基于事务Transaction机制保障数据操作的原子性和一致性支持高并发场景下的ACID特性原子性、一致性、隔离性、持久性。实际应用示例假设构建电商系统用户表存储会员编号、姓名等核心信息地址表通过会员编号关联用户主表管理多地址场景订单表记录交易数据外键关联用户和商品表通过这种设计既避免重复存储用户姓名又能灵活扩展地址信息同时确保数据更新时全局一致性。数据库的特征1.严格的数据类型约束与Excel允许单元格自由输入任意数据不同数据库通过预定义**数据模式Schema**强制规范数据类型。例如若定义某列为整数类型INT后续仅能存储整数值输入字符串将被拒绝或转换为无效值如MySQL可能隐式处理导致数据丢失需特别注意。此类约束通过数据完整性检查Data Integrity确保存储内容的有效性避免脏数据污染系统。2.事务机制保障操作可逆性数据库通过**事务Transaction**提供原子性操作支持默认不提供类似应用程序的“撤销UNDO”功能需显式启用事务如BEGIN TRANSACTION、ROLLBACK。事务机制确保多步操作要么全部成功COMMIT要么完全回滚ROLLBACK避免数据处于中间状态详见第13.3节。3.高安全性与稳定性尽管初学可能认为数据库“不够灵活”但其规则驱动的特性正是核心优势数据一致性通过ACID特性原子性、一致性、隔离性、持久性保障数据在并发操作中始终有效。操作可审计所有变更受权限控制与日志记录便于追踪和故障恢复。容错能力崩溃恢复机制如InnoDB引擎的Redo Log确保异常中断后数据不丢失。典型场景对比|特性|Excel|数据库|| — | — | — || 数据类型 | 自由混合文本、数值等 | 预定义类型INT, VARCHAR, DATE等 || 数据修改 | 直接覆盖单元格无历史追踪 | 需显式事务控制支持回滚与版本管理 || 多用户并发 | 易冲突文件级锁定 | 行级锁、MVCC机制保障并发安全 || 数据规模 | 适用于千级数据 | 支持百万至百亿级数据高效处理 |事实上MySQL是一种网络服务1.连接mysql的命令连接mysql 的完整命令如下mysql -h 主机IP -P 端口号 -u 用户名 -p密码注意在 MySQL 连接命令中-u与用户名之间需输入半角空格如-u root-p与密码之间不可有空格如-p123456直接拼接密码若在-p与密码之间误加空格如-p 123456系统会判定为要求交互输入密码而非直接使用指定密码导致认证错误。我们看看一个登录的例子好的我们登录上来了 。其实我们也可以之间指定密码是什么直接登录但是我们一般不会使用这个因为太容易通过历史命令来盗取数据库密码事实上不使用-h选项时默认连接的是本地的MYSQL不使用-P选项时默认使用的是3306端口号那我们怎么退出mysql数据库呢在提示符状态下’我们可以通过输人exit或者quit然后按下Enter键来退出MySQL。2.mysqlmysqladminmysqld大家在使用mysql的过程中难免会遇到下面这个3样东西那它们到底是什么呢mysql**mysql是MySQL的客户端用于连接MySQL服务器。**在命令行中输入mysql后会弹出MySQL客户端的界面用户可以在其中输入SQL命令或者执行MySQL的内置命令以操作MySQL数据库。比如我们可以输入以下命令连接mysql并创建一个名为test的数据库mysql -u username -p create database test;mysql客户端程序作用mysql 是一个命令行工具用于连接到 MySQL 服务器并执行 SQL 命令。它是用户与 MySQL 数据库进行交互的主要界面。功能用户可以通过 mysql 客户端输入 SQL 语句来查询、更新、删除和插入数据以及管理数据库结构如创建和删除表、索引等。使用方式在命令行或终端中输入 mysql -u 用户名 -p 来连接到 MySQL 服务器之后输入用户密码即可进入 MySQL 命令行环境。mysqladmin**mysqladmin是MySQL的管理员工具提供对MySQL的服务器进行配置和管理的功能。**在命令行中输入mysqladmin后可以使用各种命令来进行MySQL服务的管理例如创建和删除数据库、查看数据库状态等等。比如我们可以输入以下命令创建名为test的数据库mysqladmin -u username -p create testmysqladmin管理员工具作用mysqladmin 是一个用于管理和维护 MySQL 服务器的命令行工具。它提供了一系列命令来执行服务器级别的管理任务。功能例如可以使用 mysqladmin 来检查服务器的状态、创建和删除数据库、刷新权限、重载配置、关闭和重启服务器等。使用方式在命令行或终端中输入mysqladmin -u 用户名 -p 命令来执行特定的管理任务。例如检查服务器状态可以使用mysqladmin -u 用户名 -p status。mysqld**mysqld则是MySQL的服务器端程序也就是MySQL服务本身。**它在后台运行并等待用户发出连接请求。在启动MySQL服务时使用mysqld命令来启动MySQL。在Linux系统中可以使用以下命令启动MySQL服务sudo systemctl start mysqlmysqld服务器端程序作用mysqld 是 MySQL 数据库的核心组件它负责监听客户端的连接请求、执行 SQL 语句、管理数据以及维护数据库系统。功能mysqld 是 MySQL 服务的主体它负责数据的存储、检索和管理。它监听一个或多个端口默认是 3306等待客户端的连接请求并处理这些请求。运行方式mysqld 通常作为系统服务或守护进程运行在系统启动时自动启动。用户可以通过配置文件如 my.cnf 或 my.ini来定制 MySQL 服务器的行为。总结mysql是MySQL的客户端程序用于连接MySQL服务器和执行SQL命令mysqladmin是MySQL的管理员工具提供对MySQL的服务器进行配置和管理的功能mysqld是MySQL的服务器端程序也就是MySQL服务本身。三者在MySQL的使用过程中各自扮演不同的角色互相配合以保证MySQL服务的正常运行。用户通过 mysql 客户端连接到 mysqld 服务器并输入 SQL 语句来管理数据。管理员使用 mysqladmin 工具来管理和维护 MySQL 服务器如检查服务器状态、修改配置等。mysqld 服务器则负责处理客户端的请求管理数据并与其他系统组件如存储引擎协作以提供高效的数据库服务。这三者互相配合共同构成了 MySQL 数据库系统的核心组件使得用户和管理员能够高效地管理和使用数据库。从这里我们就得知MySQL是基于client-server模式下的一种网络服务我们口语上的一些词语的定义也就明显了数据库—在磁盘或者内存中存储的特定结构组织的数据即在磁盘上存储的一套数据库方案。数据库服务-----mysqld数据库客户端-----mysql3.什么是数据库优点数据库有以下定义数据库在磁盘或者内存中存储的特定结构组织的数据即在磁盘上存储的一套数据库方案。数据库database是用来组织、存储和管理数据的仓库。我们看一个例子小红是一个家政阿姨她每天的工作是给雇主收拾屋子的卫生并且将雇主女主人的用品收纳到合适的位置。这一天小红遇上了一个重大难题女主人的衣服不好收纳。机智的小红经过一些观察总结出了这个女主人的衣服有以下特点特别多。小红曾经问过女主人是否统计过家中衣服数量女主人笑而不语。加之之前误判了衣服的数量衣柜尺寸过小该雇主已经买了很多衣柜用于存放大量衣服。这种非集中式的衣柜收纳也使得找到想穿的衣服更加困难。特别乱。女主人是一个爱美的女子家中的衣服多为设计款并不像寻常人家的衣服那样有标准形状。这种情况也进一步提高了收纳衣服的难度。衣服和衣服之间有一些某种神奇的模式女生也许会更加清楚这个模式叫做穿搭风格。小红发现女主人很喜欢的一条红色裤子经常与一件绿色上衣穿在一起。但是有时候女主人会经常在找到了红色裤子的时候需要再花上10分钟才能找到那件与之搭在一起的绿色上衣。女主人很苦恼这件事情。后来小红学习了一些计算机知识理解了一些计算机思想她最终解决了这个困扰女主人的收纳难题。她的具体做法如下她将一众衣服分成了几类分别是上衣裤子裙子配饰帽子围巾手套内衣内裤袜子外套等。家中一共有3个大衣柜她将衣柜中的衣服全部清出按照1的分类分成了数堆。根据衣柜的容量将最多的上衣放置在家中最大的A衣柜将次之多裤子和裙子放在家中第二大衣柜B衣柜配饰单独放在一个衣柜中。每个衣柜中的衣服按照颜色排布解决了找不到绿色上衣的难题。至此小红解决了女主人的衣服收纳难题。在上述例子中数据库就相当于小红为女主人设计的衣服收纳系统。具体来说可以将这个类比进一步细化如下数据衣服女主人的大量衣服包括上衣、裤子、裙子、配饰等这些相当于数据库中的“数据”。数据结构分类小红将衣服分成了几类如上衣、裤子、裙子等这相当于在数据库中设计表结构或数据模型以便更有效地组织和存储数据。存储介质衣柜家中的3个大衣柜相当于数据库的存储介质用于存放数据衣服。数据分布衣柜分配小红根据衣柜的容量和衣服的数量将不同类型的衣服分配到不同的衣柜中这类似于在数据库中设计数据的分布策略以提高数据访问的效率。数据索引颜色排布小红在每个衣柜中按照颜色排布衣服这相当于在数据库中创建索引以便快速定位和检索数据。在这个例子中颜色排布解决了女主人找不到搭配衣服的问题而数据库中的索引则解决了快速查询数据的问题。因此小红利用分类、分配和索引等思想为女主人设计了一个高效的衣服收纳系统这个系统的工作原理与数据库的工作原理非常相似。你可能产生疑问既然数据库和excel的功能如此相近为何不直接使用excel进行数据存储呢数据库和excel相比有许多优势列举如下excel存储数据有规模限制excel表格最多存储1048576行16384列数据这对于大数据时代显然是不够的。数据库面对的数据规模更为庞大而当数据规模超过单一数据库的限制时即可以通过将单一数据库扩展到分布式数据库的形式扩大存储规模。excel的功能比数据库少excel可以用于制作各种复杂的表格文档进行繁琐的数据计算并能对输入的数据进行各种复杂统计运算也可以制作彩色丰富的商业图表。数据库功能则更强大除了可以实现excel的基本功能还可以通过设计和使用各种窗体进行数据查询并生成相应报表。excel的数据结构比数据库简单excel中的表格的数据按照表格存储没有数据库中的模式的概念因而很难在excel中进行连接两个表格的操作。事实上使用数据库相比于使用文件或Excel存储数据有以下优势数据库具有更好的数据结构和数据管理能力可以更方便地进行数据的增删改查操作支持事务处理和数据的完整性约束。数据库可以支持多用户同时访问和操作同一数据而文件或Excel则需要通过文件锁等机制来实现。数据库可以支持更高级别的数据查询和分析如聚合查询、复杂筛选、多表联合查询等而文件或Excel则需要编写复杂的程序来实现。数据库可以支持数据的备份和恢复以及数据的迁移和同步而文件或Excel则需要手动进行备份和复制。数据库可以更好地保护数据的安全性和隐私性支持用户和角色管理、权限控制等机制而文件或Excel则需要通过加密和访问控制等手段来实现。4.见一见MySQL数据库的使用我们见一下在Linux环境下的数据库我们现在直接使用mysql来建立一个数据库然后建立一张表结构然后插入一些数据见一见mysql在Linux是如何表现的。上面那个框框里面的就是数据库那这些数据库到底在哪里呢我们打开配置文件 /etc/mysql/mysql.conf.d/mysql.confsudo vim /etc/mysql/mysql.conf.d/mysqld.cnf上面那个datadir就是数据库所在地也就是/var/lib/mysqlsudo ls /var/lib/mysql大家看到了吧这里就是数据库所在地方接下来我们创建数据库创建数据库create database helloworld;我们去/var/lib/mysql里面看看有没有这个数据库有吧说明我们创建成功了所谓的建立数据库就是建立Linux下的一个目录使用数据库use helloworld;我们使用helloworld数据库之前必须先输入上面这个语句才能使用创建数据库表create table student( id int, name varchar(32), gender varchar(2) );这段代码是用于在数据库中创建一个名为 student 的表的SQLStructured Query Language语句。SQL是用于访问和操作数据库系统的标准编程语言。下面是这条语句各部分的解释create table student这是SQL中用来创建新表的命令。student 是新表的名称。id int这定义了表中的一个列字段名为 id数据类型为 int整数。这通常用于存储学生的唯一标识符如学号。name varchar(32)这定义了另一个列名为 name数据类型为 varchar(32)。varchar 是一种可变长度的字符串数据类型括号内的数字在这个例子中是32指定了字符串的最大长度。这意味着 name 列可以存储最多32个字符的文本通常用于存储学生的姓名。gender varchar(2)这定义了第三个列名为 gender数据类型为 varchar(2)。考虑到性别通常表示为单个字符如 ‘M’ 表示男性‘F’ 表示女性这里指定长度为2可能是为了包含可能的附加字符如一个空格或一个表示未知性别的字符或者仅仅是出于对未来扩展的考虑。整体而言这条SQL语句创建了一个包含三个字段的 student 表id整数类型用于存储唯一标识符name可变长度的字符串类型用于存储姓名最大长度为32个字符和 gender可变长度的字符串类型用于存储性别最大长度为2个字符。在数据库里建立表本质就是在创建一个文件表中插入数据我们上面创建的是一个空表现在需要往表里加数据insert into student (id, name, gender) values (1,张三,男); insert into student (id, name, gender) values (2,李四,女); insert into student (id, name, gender) values (3,王五,男);查询表中的数据select * from student;上面就是数据库的基本操作.上面自动创建的文件的那些工作都是mysqld在做的5.数据库分类数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键值Key-Value数据库、列存储数据库、面向文档数据库、搜索引擎数据库等。5.1 关系型数据库这种类型的数据库是最古老的数据库类型关系型数据库模型是把复杂的数据结构归结为简单的二元关系即二维表格形式 如下图是一个二维表的实例。通常该表第一行为字段名称描述该字段的作用下面是具体的数据。在定义该表时需要指定字段的名称及类型。图一 数据库表实例在关系型数据库中对数据的操作几乎全部建立在一个或多个关系表格上。在大型系统中通常有多个表且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。典型产品MySQL、SqlServer、Oracle、PostgreSQL、SQLite等。5.2 非关系型数据库键值存储数据库键值数据库是一种非关系数据库它使用简单的键值方法来存储数据。键值数据库将数据存储为键值对集合其中键作为唯一标识符。如图是某公有云的键值存储示意图其中键包含分区键和排序键而值包含更多的实际信息。比如实际使用是可以以学号为键姓名、性别、年龄和班级等信息为值进行存储。实际存储形式很灵活是业务需求自行定义即可。典型产品Redis、Memcached等。列存储数据库列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是对表中数据的存储形式的差异。如图是传统行数据库和列数据库表中数据在磁盘上的存储形式的差异对比。对于行存储数据库表中的数据是以行为单位逐行存储在磁盘上的而对于列存储数据库表中的数据则是以列为单位逐列存储在磁盘中。列存储解决的主要问题是数据查询问题。我们知道平时的查询大部分都是条件查询通常是返回某些字段列的数据。对于行存储数据数据读取时通常将一行数据完全读出如果只需要其中几列数据的情况就会存在冗余列出于缩短处理时间的考量消除冗余列的过程通常是在内存中进行的。而列存储每次读取的数据是集合的一段或者全部不存在冗余性问题。这样通过这种存储方式的调整使得查询性能得到极大的提升。典型产品HBase等。面向文档数据库此类数据库可存放并获取文档可以是XML、JSON、BSON等格式这些文档具备可述性self-describing呈现分层的树状结构hierarchical tree data structure可以包含映射表、集合和纯量值。数据库中的文档彼此相似但不必完全相同。文档数据库所存放的文档就相当于键值数据库所存放的“值”。文档数据库可视为其值可查的键值数据库。典型产品MongDB、CouchDB等。图形数据库图形数据库顾名思义就是一种存储图形关系的数据库。图形数据库是NoSQL数据库的一种类型它应用图形理论存储实体之间的关系信息。关系型数据用于存储明确关系的数据但对于复杂关系的数据存储却有些力不从心。如图4这种人物之间的关系如果用关系型数据库则非常复杂用图形数据库将非常简单。典型产品Neo4J、InfoGr id等。搜索引擎存储搜索引擎数据库是应用在搜索引擎领域的数据存储形式由于搜索引擎会爬取大量的数据并以特定的格式进行存储这样在检索的时候才能保证性能最优。典型产品Solr、Elasticsearch等。6.主流数据库对比我们看看目前主流的数据库几种主流关系型数据库对比数据库优势缺点MySQL1MySQL性能卓越服务稳定很少出现异常宕机。 2MySQL开放源代码且无版权制约自主性及使用成本低,版本更新较快。 3MySQL软件体积小安装使用简单并且易于维护安装及维护成本低。 4MySQL支持多种操作系统提供多种API接口支持多种开发语言特别对流行的PHP语言有很好的支持。数据量大时处理性能不及Oracle但是不代表MySQL性能差Sql Server1)真正的客户机/服务器体系结构 2)图形化的用户界面使系统管理和数据库管理更加直观、简单 3)丰富的编程接口工具为用户进行程序设计提供了更大的选择余地 4)与WinNT完全集成利用了NT的许多功能如发送和接受消息管理登录安全性等SQL Server也可以很好地与Microsoft BackOffice产品集成。 5)提供数据仓库功能这个功能只在Oracle和其他昂贵的DBMS中才有。只能在Windows系统下运行Oracle1Oracle 能在所有主流平台上运行 2Oracle 性能高保持开放平台下TPC-D和TPC-C世界记录 3获得最高认证级别的ISO标准认证价格昂贵PostgreSQL1PostgreSQL 的稳定性极强 Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步。 2PG 性能高速度快。任何系统都有它的性能极限在高并发读写负载逼近极限下PG的性能指标仍可以维持双曲线甚至对数曲线到顶峰之后不再下降。 3PG 多年来在 GIS 领域处于优势地位因为它有丰富的几何类型实际上不止几何类型PG有大量字典、数组、bitmap 等数据类型。 4PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统 5PG对数据量大的文本以及SQL处理较快SQLite1零配置SQlite3不用安装不用配置不用启动关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作再下次使用数据库的时候自动恢复 2SQLite是被设计成轻量级自包含的不依赖服务进程 3采用无数据类型所以可以保存任何类型的数据SQLite采用的是动态数据类型会根据存入值自动判断 4可移植可运行在不同操作系统上数据量不宜过大sql语句执行相比其他数据库效率较低几种主流非关系型数据库对比———数据库优势缺点Redis1支持内存缓存这个功能相当于Memcached 2支持持久化存储这个功能相当于MemcacheDbttserver 3数据类型更丰富。比其他key-value库功能更强 4支持主从集群分布式 5支持队列等特殊功能Memcached开源的、高性能的、具有分布式内存对象的纯缓存系统不支持持久化HBase1)适合存储半结构化或非结构化数据 2高可用和海量数据以及很大的瞬间写入量 3记录很稀疏RDBMS的行有多少列是固定的,为null的列浪费了存储空间。HBase为null的Column不会被存储这样既节省了空间又提高了读性能。1不适合于大范围扫描查询 2不直接支持 SQL 的语句查询MongoDB1弱一致性最终一致更能保证用户的访问速度 2查询与索引方式灵活是最像SQL的Nosql 3内置GridFS支持大容量的存储 4内置Sharding支持复制集、主备、互为主备、自动分片等特性 5第三方支持丰富 6性能优越1单机可靠性比较差 2磁盘空间占用比较大 3大数据量持续插入写入性能有较大波动7.为什么MySQL数据库这么受欢迎MySQL之所以如此受欢迎主要归因于以下几个关键因素一、开源免费MySQL是一个完全开源的数据库系统用户可以免费使用并且其源代码对所有人开放。这一点对于许多小型企业和个人开发者来说非常重要因为它们可能没有足够的预算去购买昂贵的商业数据库系统。开源也意味着MySQL有一个庞大的用户和开发者社区用户在遇到问题时可以很容易地找到帮助和解决方案。二、高性能MySQL使用了多种机制进行优化包括索引、缓存等使得其查询速度非常快。MySQL采用了B-Tree索引来加快数据的查找速度同时也使用了缓存机制将常用的数据存储在内存中避免了频繁的磁盘I/O操作从而提高了查询速度。这使得MySQL非常适合处理大量的数据和高并发的查询。三、易于使用MySQL的安装和配置都非常简单用户可以很快地将它部署在自己的系统上。MySQL的使用也非常方便它有一个非常友好的用户界面用户可以通过这个界面进行各种数据库操作。此外MySQL还有大量的教程和文档以及丰富的社区支持这些资源可以帮助用户更快地学习和掌握MySQL的使用。四、稳定性好MySQL的稳定性经过了大量的实践检验它可以在各种环境下稳定运行。无论是在大型的服务器上还是在小型的个人电脑上MySQL都可以稳定运行不会出现严重的错误和故障。这使得用户可以信任MySQL将其用于重要的业务系统。五、支持多种操作系统MySQL可以在Windows、Linux、Mac等多种操作系统上运行兼容性非常好。这使得MySQL可以适应各种不同的环境和需求无论用户使用什么样的操作系统都可以使用MySQL。六、丰富的功能集MySQL具有丰富的功能集包括事务支持、存储过程、触发器和视图等可以满足各种应用程序的需求。同时MySQL还支持多种存储引擎如InnoDB、MyISAM等用户可以根据不同的应用场景选择合适的存储引擎。七、安全性高MySQL提供了多层次的安全措施包括密码保护、基于角色的访问控制、SSL连接加密等以保护数据免受未授权访问和安全威胁。这些安全措施使得MySQL成为一个安全可靠的数据库系统。八、广泛的应用程序和平台支持无论是在Web开发、企业应用程序还是云计算领域MySQL都有广泛的应用。因此开发人员和管理员可以轻松地找到相关的文档、教程和支持。这使得MySQL成为一个非常流行的数据库系统。综上所述MySQL之所以如此受欢迎是因为它具有开源免费、高性能、易于使用、稳定性好、支持多种操作系统、丰富的功能集、安全性高以及广泛的应用程序和平台支持等多个优点。这些优点使得MySQL成为许多企业和个人开发者的首选数据库系统。所以我们要好好学习MySQL8.服务器数据库表之间的关系数据库服务器其实就是在机器上装了一个数据库管理程序这个管理程序可以管理多个数据库一般开发人员会针对每一个应用创建一个数据库。而为保存应用中实体的数据一般会在数据库创建多个表以保存程序中实体的数据。因此数据库服务器、数据库和表的关系如图所示9.MySQL架构我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture)第一层连接层所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 连接处理身份验证安全性等等。第二层核心服务层。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的包括权限判断 sql解析行计划优化 query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层如存储过程触发器视 图等。第三层存储引擎层。通常叫做StorEngine Layer 也就是底层数据存取操作实现部分由多种存储引擎共同组成。它们负责存储和获取所有存储在MySQL中的数据。就像Linux众多的文件系统 一样。每个存储引擎都有自己的优点和缺陷。服务器是通过存储引擎API来与它们交互的。这个接口隐藏 了各个存储引擎不同的地方。对于查询层尽可能的透明。这个API包含了很多底层的操作。如开始一个事 物或者取出有特定主键的行。存储引擎不能解析SQL互相之间也不能通信。仅仅是简单的响应服务器 的请求。**第四层数据存储层。**主要是将数据存储在运行于裸设备的文件系统之上并完成与存储引擎的交互。9.1.MySQL逻辑模块组成虽然从上图看起来 MySQL 架构非常的简单就是简单的两部分而已但实际上每一层 中都含有各自的很多小模块尤其是第二层 SQL Layer 结构相当复杂的。下面我们就分别 针对 SQL Layer 和 Storage Engine Layer 做一个简单的分析。我们看下图体系结构1.Connectors指的是不同语言中与SQL的交互如php、java等。2 Management Serveices Utilities系统管理和控制工具3 Connection Pool: 连接池管理缓冲用户连接线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求接收连接请求转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配或创建一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信 接受客户端的命令请求传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建线程的 cache 等。4 SQL Interface: SQL接口。接受用户的SQL命令并且返回用户需要查询的结果。比如select from就是调用SQL Interface5 Parser: 解析器。SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的是一个很长的脚本。在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 query 在 MySQL Server 里面连接线程接收到客户端的一个 Query 后会直接将该 query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。主要功能a . 将SQL语句进行语义和语法的分析分解成数据结构然后按照不同的操作类型进行分类然后做出针对性的转发到后续步骤以后SQL语句的传递和处理就是基于这个结构的。b. 如果在分解构成中遇到错误那么就说明这个sql语句是不合理的6 Optimizer: 查询优化器。SQL语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端请求的 querysql语句 根据客户端请求的 query 语句和数据库中的一些统计信息在一系列算法的基础上进行分析得出一个最优的策略告诉后面的程序如何取得这个 query 语句的结果他使用的是“选取-投影-联接”策略进行查询。 用一个例子就可以理解 select uid,name from user where gender 1; 这个select 查询先根据where 语句进行选取而不是先将表全部查询出来以后再进行gender过滤 这个select查询先根据uid和name进行属性投影而不是将属性全部取出以后再进行过滤 将这两个查询条件联接起来生成最终查询结果7 Cache和Buffer 查询缓存。Cache主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中与该 query 的一个 hash 值 做一个对应。该 Query 所取数据的基表发生任何数据的变化之后 MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中 Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。如果查询缓存有命中的查询结果查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存记录缓存key缓存权限缓存等buffer与cache的区别 缓存那里实际上有buffer和cache两个那它们之间是否有什么不同呢简单的说就是buffer是写缓存cache是读缓存。8 、存储引擎接口存储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类但正是因为它成功地将各种数据处理高度抽象化才成就了今天 MySQL 可插拔存储引擎的特色。 从图还可以看出MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持这些标准与存储引擎本身无关可能是每个数据库系统本身都必需的如SQL分析器和优化器等而存储引擎是底层物理结构的实现每个存储引擎开发者都可以按照自己的意愿来进行开发。 注意存储引擎是基于表的而不是数据库。10.SQL语句分类DDL【data definition language】 数据定义语言用来维护存储数据的结构代表指令: create, drop, alterDML【data manipulation language】 数据操纵语言用来对数据进行操作代表指令 insertdeleteupdateDML中又单独分了一个DQL数据查询语言代表指令 selectDCL【Data Control Language】 数据控制语言主要负责权限管理和事务代表指令 grantrevokecommit11.存储引擎存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的所以存储引擎也可以称为表类型即存储和操作此表的类型。在Oracle 和SQL Server等数据库中只有一种存储引擎所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎用户也可以根据自己的需要编写自己的存储引擎。show engines;事实上使用次数最多的是InnoDB和MyISAM这就是我们配置文件里面配置的东西我们把默认的存储引擎改成了innodb12.DDLDMLACIDDDL 操作DDLData Definition Language是 SQL 中用于定义和管理数据库结构的语句集合核心操作对象是表、索引、视图等数据库对象而非数据本身。目标创建、修改或删除数据库的逻辑结构。常见 DDL 操作及示例操作SQL 语句作用示例创建CREATE新建数据库对象表、索引、视图等CREATE TABLE users (id INT, name VARCHAR(50));修改ALTER修改已有对象的结构增删列、改类型、加约束等ALTER TABLE users ADD email VARCHAR(100);删除DROP永久删除对象表、索引、数据库等DROP TABLE users;重命名RENAME修改表或列的名称RENAME TABLE old_name TO new_name;清空TRUNCATE TABLE快速清空表数据保留表结构不可回滚TRUNCATE TABLE logsDML 操作数据操作语言DMLData Manipulation Language是 SQL 中用于操作表中数据的语句集合核心是对数据的增、删、改、查。常见 DML 操作操作SQL 语句作用示例插入INSERT INTO向表中添加新记录INSERT INTO users (name) VALUES (Alice);更新UPDATE修改表中已有记录UPDATE users SET age25 WHERE id1;删除DELETE FROM删除表中的记录保留表结构DELETE FROM users WHERE id2;查询SELECT从表中检索数据最常用 DMLSELECT * FROM users;关键特性操作对象是数据行非表结构。通常需要事务支持如 InnoDB保证操作的原子性和一致性。在事务中执行时可通过COMMIT提交或ROLLBACK回滚。DML vs DDL数据定义语言DML操作数据INSERT/UPDATE/DELETE/SELECT。DDL操作表结构CREATE TABLE、ALTER TABLE、DROP TABLE。ACID 模型事务的四大特性ACID是数据库事务的四个核心特性确保在高并发或故障场景下数据的可靠性与一致性特性含义实现机制以 InnoDB 为例A原子性(Atomicity)事务是一个不可分割的整体要么全部成功要么全部失败回滚。通过Undo Log实现 记录操作前的数据镜像回滚时恢复。C一致性(Consistency)事务执行后数据库必须保持逻辑一致性如约束、数据类型正确。由应用层逻辑 数据库约束主键/外键/唯一键共同保证。I隔离性(Isolation)并发事务之间互不干扰防止脏读、不可重复读等问题。通过锁机制行锁/间隙锁和MVCC多版本并发控制实现。D持久性(Durability)事务提交后数据永久保存即使系统崩溃也不丢失。通过Redo Log实现 事务提交前先写日志到磁盘崩溃后重放日志恢复。《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取