写过一篇 发表于 2024-7-25 17:58:19

数据库基础、利用C语言构建一个数据库、SQL语言、MySQL_c语言数据库(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,每每是本身探索发展,但本身不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此网络整理了一份《2024年最新Golang全套学习资料》,初衷也很简朴,就是渴望可以大概帮助到想自学提升又不知道该从何学起的朋友。
https://img-blog.csdnimg.cn/img_convert/f094cd7e7d46badae6939b2f93c40041.png
https://img-blog.csdnimg.cn/img_convert/75d68827f836f49805aa1356b985cb37.png
https://img-blog.csdnimg.cn/img_convert/d35683f91b6610b1011b5c6f67312640.png
https://img-blog.csdnimg.cn/img_convert/7359541d6d0c7d2cc610c5c3afb176cc.png
https://img-blog.csdnimg.cn/img_convert/8a32a7d45ac80965b8d05d199a8284e2.png
既有适合小白学习的零基础资料,也有适合3年以上经验的小搭档深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比力多,这里只是将部分目次截图出来,全套包罗大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
假如你需要这些资料,可以添加V获取:vip1024b (备注go)
https://img-blog.csdnimg.cn/img_convert/13cb3f4de53127f0cc781ca54b7166ff.jpeg
正文

Java Data Base(JDBC,Java 数据库连接)用于 Java 应用程序连接数据库的标准方法,是一种用于实验 SQL 语句的 Java API,可以为多种关系数据库提供同一访问,它由一组用 Java 语言编写的类和接口构成。
ADO.NET

ADO.NET 是微软在 .NET 框架下开发设计的一组用于和数据源举行交互的面向对象类库。ADO.NET 提供了对关系数据、XML 和应用程序的访问,答应和差别范例的数据源以及数据库举行交互。
PDO

PDO(PHP Data Object)为 PHP 访问数据库定义了一个轻量级的、同等性的接口,它提供了一个数据访问抽象层,如许,无论利用什么数据库,都可以通过同等的函数实验查询和获取数据。PDO 是 PHP 5 新加入的一个重大功能。
3.常用数据库大汇总(附带优缺点)

现在已经存在了很多优秀的商业数据库,如甲骨文(Oracle)公司的 Oracle 数据库、IBM 公司的 DB2 数据库、微软公司的 SQL Server 数据库和 Access 数据库。同时,还有很多优秀的开源数据库,如 MySQL 数据库,PostgreSQL 数据库等。下面介绍这些常见的数据库。
1)Oracle

Oracle 是甲骨文公司的一款关系型数据库管理体系,在数据库领域一直处于领先职位的产品,是目前世界上流行的关系型数据库之一,是一种高服从、可靠性好、适应高吞吐量的数据库方案。
https://img-blog.csdnimg.cn/img_convert/5c46775ef1fd8bc5c73c1f094d8103ae.png
Oracle图标
优点:


[*]Oracle 可移植性好,能在所有主流平台上运行(包罗 Windows),完全支持所有工业标准。接纳完全开放计谋,使客户可以选择最适合解决方案。以及对开发商的全力支持。
[*]获得最高认证级别的 ISO 标准认证,安全性高。
[*]与其它数据库相比,Oracle 性能最高。保持着开放平台下 TPC-D 和 TPC-C 世界记录。
[*]多层次网络盘算,支持多种工业标准,可以用 ODBC、JDBC、OCI 等网络客户连接 。
[*]完全向下兼容,因此被广泛应用,且风险低 。
   向下兼容指的是高版本支持低版本的或者说后期开发的版本支持和兼容早期开发的版本。
缺点:


[*]对硬件的要求高
[*]价格比力昂贵
[*]管理维护贫苦
[*]操纵比力复杂
2)SQL Server

SQL Server 是 Microsoft(微软)公司推出的关系型数据库管理体系,重要应用于大型的管理体系中。
https://img-blog.csdnimg.cn/img_convert/3a40830135d5e0b8b2d4e7ca39ca32da.png
SQL Server图标
优点:


[*]与微软的 Windows 系列操纵体系的兼容性很好。
[*]高性能设计,可充实利用 WindowsNT 的上风。
[*]体系管理先进,支持 Windows 图形化管理工具,支持当地和远程的体系管理和配置。
[*]强壮的事务处置处罚功能,接纳各种方法保证数据的完备性。
[*]支持对称多处置处罚器布局、存储过程、ODBC,并具有自主的 SQL 语言。
缺点:


[*]SQL Server 只能在 Windows 体系上运行,没有丝毫开放性。
[*]没有获得任何安全证书。
[*]多用户时性能不佳 。
[*]只支持 C/S 模式,SQL Server C/S 布局只支持 Windows 客户用 ADO、DAO、OLEDB、ODBC 连接。
3)MySQL

MySQL 是一种开放源代码的关系型数据库管理体系,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。因为其速率、可靠性和适应性而备受关注。MySQL 是流行的关系型数据库管理体系之一,在 WEB 应用方面,MySQL 是最好的应用软件之一。
https://img-blog.csdnimg.cn/img_convert/86aa6b3acf2e03b0735bc3938a1cd526.png
MySQL图标
优点:


[*]性能卓越服务稳定,很少出现非常宕机
[*]开放源代码且无版权制约,自主性强、利用成本低。
[*]汗青悠久、社区及用户非常活跃,遇到题目,可以很快获取到帮助。
[*]软件体积小,安装利用简朴,并且易于维护,安装及维护成本低。
[*]支持多种操纵体系,提供多种 API 接口,支持多种开发语言。
缺点:


[*]MySQL 最大的缺点是其安全体系,重要是复杂而非标准,只有调用 mysqladmin 来重读用户权限才会发生改变。
[*]MySQL 不答应调试存储过程,开发和维护存储过程很难。
[*]MySQL 不支持热备份。
[*]MySQL 的价格随平台和安装方式变化。
4)Access

Access 是由 Microsoft(微软)发布的小型关系数据库管理体系,是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理体系。
https://img-blog.csdnimg.cn/img_convert/e03c6547800f2fa0b83b3285182151aa.png
Access图标
优点:


[*]存储方式简朴,易于维护管理。Access 的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb 或 .accdb)的数据库文件中,便于用户的操纵和管理。
[*]Access 是一个面向对象的开发工具,这种基于面向对象的开发方式,使得开发应用程序更为简便。
[*]界面友好、易操纵。Access 是一个可视化工具,风格与 Windows 完全一样,用户想要生成对象应用,只要利用鼠标举行拖放即可,非常直观方便。体系还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操纵简便,容易利用和掌握。
[*]集成环境,可以处置处罚多种数据信息。Access 基于 Windows 操纵体系下的集成开发环境,该环境集成了各种向导和生成器工具,极大地进步了开发职员的工作服从,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地举行。
[*]支持广泛,易于扩展,弹性大。Access 是一个既可以只用来存放数据的数据库,也可以作为一个客户端开发工具来举行数据库应用体系开发。即可以开发方便易用的小型软件,也可以用来开发大型的应用体系。
缺点:


[*]不支持并发处置处罚。
[*]数据库存储量小安全性不够高。
[*]Access 是小型数据库,当数据量过大时,一样平常百M以上(纯数据,不包罗窗体、报表等客户端对象)性能会变差。
[*]虽然理论上支持 255 个并发用户,但实际上根本支持不了那么多,假如以只读方式访问大概在 100 个用户左右,而假如是并发编辑,则大概在10-20个用户。
[*]单表记录数过百万时,性能就会变得较差,假如加上设计不良,这个限度还要降低。
[*]不能编译成可实验文件(.exe),必须要安装 Access 运行环境才能利用。
5)DB2

DB2 是美国 IBM 公司开发的一款支持多媒体、Web 的关系型数据库管理体系。重要应用于大型应用体系,具有较好的可伸缩性,可支持从大型机到单用户环境。
https://img-blog.csdnimg.cn/img_convert/7e86789dc3cbc49dab4783274456fef9.png
DB2图标
优点:


[*]相比力 MySQL 和 Oracle 两种数据库来说,DB2 提供了高层次的数据利用性、完备性、安全性、可恢复性,以及小规模到大规模地应用程序实验能力,具有与平台无关的基本功能和 SQL 命令。
[*]DB2 接纳了数据分级技术,可以大概使大型数据很方便的下载到数据库服务器,使数据库当地化和远程连接透明化。
[*]拥有非常完备的查询优化器,改善了查询性能,并支持多使命并行查询。
[*]具有很好的网络支持能力,每个子体系可以连接十几万个分布式用户,可同时激活上千个运动线程,对大型分布式应用体系更加利用。
[*]DB2 可跨平台利用。
缺点:


[*]配置文件和参数多,且定名不规范。
[*]一些 DB2 产品开发不方便。
[*]和 Oracle 相比,命令多,且没 Oracle 同一规范的好。
[*]由于其设计框架的题目,假如用户对数据库的本身优化和应用程序优化做的不足,那么 DB2 容易出现锁等候征象。
6)PostgreSQL

PostgreSQL 是一款富有特色的自由数据库管理体系,甚至可以说是最强大的自由软件数据库管理体系。该数据库管理体系支持了目前世界上最丰富的数据范例。是自由软件数据库管理体系中唯一支持事务、子查询、多版本并行控制体系、数据完备性检查等特性的自由软件。
https://img-blog.csdnimg.cn/img_convert/ca6eed6459be099d429d20bdf03c00e5.png
PostgreSQL图标
优点:


[*]PostgreSQL 遵循的是 BSD 协议,是一个完全开源、免费、同时非常强大的关系型数据库。
[*]与 PostgreSQL 配合的有很多分布式集群软件,如 pgpool、pgcluster、slony、plploxy 等等,很容易做读写分离、负载均衡、数据程度拆分等方案,而这些 MySQL 则比力难实现。
[*]PostgreSQL 源代码写的很清楚,易读性比 MySQL 强,以是很多公司基本都是以 PostgreSQL 做二次开发的。
[*]PostgreSQL 是多历程的,而 MySQL 是多线程的。并发不高时,MySQL处置处罚速率快,但当并发高的时间,对于现在多核的单台机器上,MySQL 的总体处置处罚性能不如 PostgreSQL,原因是 MySQL 的线程无法充实利用 CPU 的能力。
[*]PostgreSQL 有很强大的查询优化器,支持很复杂的查询处置处罚。
   BSD 开源协议是一个给于利用者很大自由的协议。可以自由的利用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
缺点:


[*]对于简朴而繁重的读取操纵,相比力其它数据库来说,PostgreSQL 性能较低。
[*]PostgreSQL 数据库扩容花费时间很长。
4.MySQL是什么?它有什么上风?

随着时间的推移,开源数据库在中低端应用中渐渐流行起来,占据了很大的市场份额。开源数据库具有免费利用、配置简朴、稳定性好、性能良好等特点,而 MySQL 数据库正是开源数据库中的良好代表。
   开源全称为“开放源代码”。很多人以为开源软件最显着的特点是免费,但实际上并不是如许的,开源软件最大的特点应该是开放,也就是任何人都可以得到软件的源代码。可以在源代码的基础上加以修改学习,甚至重新发放,当然是在版权限制范围之内。不清楚的读者可以参考《开源就便是免费吗?用究竟来语言》一节。
MySQL 是最流行的数据库之一,是一个免费开源的关系型数据库管理体系,但也不意味着该数据库是完全免费的。MySQL 由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 适合中小型软件,被个人用户以及中小企业青睐。
针对差别的用户,MySQL 分为两个版本:

[*]MySQL Community Server(社区版):该版本是自由下载且完全免费的,但是官方不提供技术支持。
[*]MySQL Enterprise Server(企业版):该版本是收费的,而且不能下载,但是该版本拥有完善的技术支持(官方提供电话技术支持)。
注意:MySQL Cluster 重要用于架设群服务器,需要在社区服务或企业版的基础上利用。
MySQL 的定名机制由 3 个数字和 1 个后缀构成,比方 mysql-5.7.20:


[*]第 1 个数字“5”是主版本号,用于形貌文件的格式,所有版本 5 的发行版都有相同的文件夹格式。
[*]第 2 个数字“7”是发行级别,主版本号和发行级别组合在一起便构成了发行序列号。
[*]第 3 个数字“20”是在此发行系列的版本号,随每次新发行的版本递增。通常选择已经发行的最新版本。
在 MySQL 开发过程中,同时存在多个发布系列,每个发布系列的成熟度处在差别阶段。


[*]MySQL 5.7 是最新开发的稳定(GA)发布系列,是将实验新功能的系列,目前已经可以正常利用。
[*]MySQL 5.6 是比力稳定的(GA)发布系列,只针对漏洞修复重新发布,不增长会影响稳定性的新功能。
[*]MySQL 5.1 是一个稳定的(产品质量)发布系列,只针对严重漏洞修复和安全修复重新发布,不增长影响该系列稳定性的紧张功能。
   注意:对于 MySQL 4.1 等低于 5.0 的老版本,官方将不再提供支持。所有发布的 MySQL 版本已经颠末严格标准的测试,可以保证其安全可靠地利用。针对差别的操纵体系,读者可以在MySQL官方下载页面(http://dev.mysql.com/downloads/)下载相应的安装文件。
MySQL的特点、上风

MySQL 数据库管理体系具有很多的上风,下面总结了此中几种。
1)MySQL 是开放源代码的数据库

MySQL 是开放源代码的数据库,任何人都可以获取该数据库的源代码。这就使得任何人都可以修正 MySQL 的缺陷,并且任何人都能以任何目的来利用该数据库。MySQL 是一款可以自由利用的数据库。
2)MySQL 的跨平台性

MySQL 不光可以在 Windows 系列的操纵体系上运行,还可以在 UNIX、Linux 和 Mac OS 等操纵体系上运行。因为很多网站都选择 UNIX、Linux 作为网站的服务器,以是 MySQL 的跨平台性保证了其在 Web 应用方面的上风。虽然微软公司的 SQL Server 数据库是一款很优秀的商业数据库,但是其只能在 Windows 系列的操纵体系上运行。因此,MySQL 数据库的跨平台性是一个很大的上风。
3)价格上风

MySQL 数据库是一个自由软件,任何人都可以从 MySQL 的官方网站上下载该软件,这些社区版本的 MySQL 都是免费试用的,纵然是需要付费的附加功能,其价格也是很自制的。相对于 Oracle、DB2 和 SQL Server 这些价格昂贵的商业软件,MySQL 具有绝对的价格上风。
4)功能强大且利用方便

MySQL 是一个真正的多用户、 多线程 SQL 数据库服务器。它可以大概快速、有用和安全的处置处罚大量的数据。相对于 Oracle 等数据库来说,MySQL 的利用黑白常简朴的。MySQL 重要目标是快速、健壮和易用。
MySQL 与常用的主流数据库 Oracle、SQL Server 相比,重要特点就是免费,并且在任何平台上都能利用,占用的空间相对较小。但是,MySQL 也有一些不足,比如对于大型项目来说,MySQL 的容量和安全性就略逊于 Oracle 数据库。
5.MySQL适用于哪些场景?

MySQL 是目前世界上最流行的开源关系数据库,大多应用于互联网行业。比如,在国内,大家所熟知的百度、腾讯、淘宝、京东、网易、新浪等,国外的 Google、Facebook、Twitter、GitHub 等都在利用 MySQL。社交、电商、游戏的焦点存储每每也是 MySQL。
任何产品都不可能是万能的,也不可能适用于所有的应用场景。那么 MySQL 到底适用于哪些场景又不适用于哪些场景呢?
1. Web 网站体系

Web 网站开发者是 MySQL 最大的客户群,也是 MySQL 发展史上最为紧张的支撑气力。
MySQL 之以是能成为 Web 网站开发者们最青睐的数据库管理体系,是因为 MySQL 数据库的安装配置都非常简朴,利用过程中的维护也不像很多大型商业数据库管理体系那么复杂,而且性能出色。还有一个非常紧张的原因就是 MySQL 是开放源代码的,完全可以免费利用。
2、日志记录体系

MySQL 数据库的插入和查询性能都非常的高效,假如设计的好,在利用 MyISAM 存储引擎的时间,两者可以做到互不锁定,达到很高的并发性能。以是,对需要大量的插入和查询日志记录的体系来说,MySQL 黑白常不错的选择。比如处置处罚用户的登录日志,操纵日志等,都黑白常适合的应用场景。
3、数据仓库体系

随着现在数据仓库数据量的飞速增长,我们需要的存储空间越来越大。数据量的不断增长,使数据的统计分析变得越来越低效,也越来越困难。下面是几个重要的解决思路。
1)接纳昂贵的高性能主机以进步盘算性能,用高端存储装备进步 I/O 性能,效果理想,但是成本非常高;
2)通过将数据复制到多台利用大容量硬盘的廉价 PC Server 上,以进步整体盘算性能和 I/O 能力,效果尚可,存储空间有肯定限制,成本低廉;
3)通过将数据程度拆分,利用多台廉价的 PC Server 和当地磁盘来存放数据,每台机器上面都只有所有数据的一部分,解决了数据量的题目,所有 PC Server 一起并行盘算,也解决了盘算能力题目,通过中间代理程序调配各台机器的运算使命,既可以解决盘算性能题目又可以解决 I/O 性能题目,成本也很低廉。
在上面的三个方案中,第二和第三个的实现,MySQL 都有较大的上风。通过 MySQL 的简朴复制功能,可以很好的将数据从一台主机复制到另外一台 ,不光仅在局域网内可以复制,在广域网同样可以。
当然,很多人可能会说,其他的数据库同样也可以做到,不是只有 MySQL 有如许的功能。确实,很多数据库同样能做到,但是 MySQL 是免费的,其他数据库大多都是按照主机数量或者 cpu 数量来收费,当我们利用大量的 PC Server 的时间,License 费用相当惊人。以是第一个方案,基本上所有数据库体系都可以大概实现,但是其高昂的成本不是每一个公司都可以大概承担的。
4、嵌入式体系

嵌入式环境对软件体系最大的限制是硬件资源非常有限,在嵌入式环境下运行的软件体系,必须是轻量级低消耗的软件。
MySQL 在资源的利用方面的伸缩性非常大,可以在资源非常充裕的环境下运行,也可以在资源非常少的环境下正常运行。它对于嵌入式环境来说,是一种非常合适的数据库体系,而且 MySQL 有专门针对于嵌入式环境的版本。
并且,MySQL 的定位是通用数据库,各种范例的应用一样平常都能利用到 MySQL 存取数据的上风。业内生产实践证明,MySQL 更适合中小型企业。以目前的软硬件产品程度来看,假如数据凌驾几个 TB 将难以高效利用 MySQL。
MySQL 可以作为传统的关系型数据库产品利用,也可以当作一个 key-value 产品来利用。由于它具有优秀的劫难恢复功能,因此相对于目前市场上的一些 key-value 产品会更有上风。
6.学MySQL前,需要相识这些数据库专业术语

在正式学习 MySQL 数据库前,我们有须要先相识一下数据库中的专业术语。下面汇总了一些在学习 MySQL 过程中会遇到的专业术语。
数据库管理体系(DBMS)是位于操纵体系与用户之间的一种利用和管理数据库的软件。关系型数据库通过关系数据库管理体系(RDBMS)举行管理。
关系(Relational,即 RDBMS 里的 R)表示这是一种特殊的 DBMS,数据库中表与表之间要存在关系。
数据库(DataBase,即 RDBMS 里的 DB)是一个用来存储和管理数据的仓库。它的存储空间很大,并且有肯定的数据存放规则。通过由行和列构成的二维表(类似 Excel 工作表)来管理数据。数据库中可以同时存储多个表。
管理体系(Management System,即 RDBMS 里的 MS)是一个软件,我们可以通过它来插入(insert)、查询(query)、修改(modify)或删除(delete)表中的数据。
用来管理数据的二维表在关系数据库中简称为表(Table),每个表由多个行(Row)和列(Column)构成。
表的列(垂直方向)称为字段,是具有相同数据范例的数据聚集。表的行(程度方向)称为记录(Record),相当于一条数据。记录可以包罗多项信息,表中的每一列都对应于此中的某一项。
下图是一个统计学生信息的 student 表。可以看到,每个列都包罗了所有学生的某个信息,比如 name(姓名)。而每行则包罗了某个学生的所有信息,即 id(编号)、name(姓名)、 age (年岁)、stuno(学号)等。
https://img-blog.csdnimg.cn/img_convert/0532a3f19454bd28ba193115c9d04be7.png
SQL(Structured Query Language,布局化查询语言)是用来操纵关系型数据库的语言,利用 SQL 可以对数据库和表举行添加、删除、修改和查询等操纵。
与其它盘算机语言一样,初次接触 SQL 的人肯定会以为它很希奇。比方,在创建表时,很多人都会把表与图表或图片接洽起来,但是 MySQL 不是如许的。在 MySQL 中创建表时,你必须输入类似下面如许的内容。
CREATE TABLE student (
id int(4),
name varchar(20),
age int(4),
stuno int(11),
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
假如你对 SQL 还不太认识,可能会对以上语句心生畏惧。不过请放心,随着教程的深入学习,你会很快的熟练利用 SQL,并且对上述 SQL 语句的看法也会悄然地发生变化。它不再是一组怪诞地表达,而是一种有助于信息形貌的强大工具。
7.MySQL客户端和服务器架构(C/S架构)

客户端-服务器(Client/Server)布局简称 C/S 布局,是一种网络架构,通常在该网络架构下的软件分为客户端和服务器。
服务器是整个应用体系资源的存储和管理中心,多个客户端分别各自处置处罚相应的功能,共同实现完备的应用。在客户/服务器布局中,客户端用户的哀求被传送到数据库服务器,数据库服务器举行处置处罚后,将结果返回给用户,从而减少网络数据的传输量。
用户在利用应用程序时,首先启动客户端,然后通过相关命令告知服务器举行连接以完成各种操纵,而服务器则按照此请示提供相应的服务。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出哀求。
客户端和服务器程序通常不在同一台盘算机上运行,比如,我们平时在当当网上买书的时间,所利用的电脑和网页欣赏器就被当做了一个客户端,同时,构成当当网的电脑、数据库和应用程序就被当做服务器。
数据库管理体系可分为两类:一类是基于共享文件体系的数据库管理体系,比方 Microsoft Access 和 FileMaker,重要用于桌面用途,不适合用于高端或更关键的应用;另一类是基于客户端-服务器的数据库管理体系,比方 MySQL、Oracle 和 SQL Server 等数据库。
服务器软件负责访问和处置处罚所有数据的一个软件,这个软件运行在称为数据库服务器的盘算机上,并且与数据文件打交道的只有服务器软件。
关于数据的添加、删除和更新等所有的哀求都由服务器完成。这些哀求来自于运行客户端的盘算机。客户端用来和用户打交道。比方,假如你哀求一个按字母顺序列出的产品表,则客户端会通过网络提交该哀求给服务器,服务器处置处罚这个哀求,然后根据需要对数据举行过滤、丢弃和排序,最后把结果返回到客户端。
注意:客户端和服务器可以安装在两台盘算机或一台盘算机上,不管它们在不在相同的盘算机上,客户端都要与服务器举行通信。
以上这些过程对用户都是透明的,你不需要直接访问数据文件。为了利用MySQL,你需要访问运行 MySQL 服务器的盘算机和发布命令到 MySQL 客户端的盘算机。
对于 MySQL 数据库管理体系,服务器为MySQL DBMS。你可以在当地安装的副本上运行,也可以连接到运行在你具有访问权的远程服务器上的一个副本。
客户端可以是 MySQL 提供的工具(如 MySQL Workbench、SQLyog)、脚本语言(如Perl)、Web 应用开发语言(如ASP、ColdFusion、JSP 和 PHP)和程序设计语言(如 C、C++、Java)等。
8.明白了MySQL内部布局才能成为高手!

麻雀虽小,五脏俱全。MySQL 虽然以简朴著称,但其内部布局并不简朴,本节重要介绍 MySQL 的整体架构构成。
学习 MySQL 就好比盖房子,假如想把房子盖的特殊高,地基肯定要稳,基础肯定要牢固。学习 MySQL 数据库前要先相识它的内部布局,这是学好 MySQL 数据库的前提。
MySQL 由连接池、SQL 接口、解析器、优化器、缓存、存储引擎等构成,可以分为三层,即 MySQL Server 层、存储引擎层和文件体系层。MySQL Server 层又包罗连接层和 SQL 层。如下是官方文档中 MySQL 的基础架构图:
https://img-blog.csdnimg.cn/img_convert/f14bd2c76048ed26ad723abbd0818f14.png
MySQL基础架构图
上图中,Connection pool 为连接层,Management Services & Utilities …Caches & Buffers 为 SQL 层,Pluggable Storage Engines 为存储引擎层,File system、Files & Logs 为文件体系层。
Connectors 不属于以上任何一层,可以将 Connectors 理解为各种客户端、应用服务,重要指的是差别语言与 SQL 的交互。
1. 连接层

应用程序通过接口(如 ODBC、JDBC)来连接 MySQL,最先连接处置处罚的是连接层。连接层包罗通信协议、线程处置处罚、用户名密码认证 3 部分。


[*]通信协议负责检测客户端版本是否兼容 MySQL 服务端。
[*]线程处置处罚是指每一个连接哀求都会分配一个对应的线程,相当于一条 SQL 对应一个线程,一个线程对应一个逻辑 CPU,在多个逻辑 CPU 之间举行切换。
[*]密码认证用来验证用户创建的账号、密码,以及 host 主机授权是否可以连接到 MySQL 服务器。
Connection Pool(连接池)属于连接层。由于每次建立连接都需要消耗很多时间,连接池的作用就是将用户连接、用户名、密码、权限校验、线程处置处罚等需要缓存的需求缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。
2. SQL层

SQL 层是 MySQL 的焦点,MySQL 的焦点服务都是在这层实现的。重要包罗权限判定、查询缓存、解析器、预处置处罚、查询优化器、缓存和实验筹划。


[*]权限判定可以审核用户有没有访问某个库、某个表,或者表里某行数据的权限。
[*]查询缓存通过 Query Cache 举行操纵,假如数据在 Query Cache 中,则直接返回结果给客户端,不必再举行查询解析、优化和实验等过程。
[*]查询解析器针对 SQL 语句举行解析,判定语法是否精确。
[*]预处置处罚器对解析器无法解析的语义举行处置处罚。
[*]查询优化器对 SQL 举行改写和相应的优化,并生成最优的实验筹划,就可以调用程序的 API 接口,通过存储引擎层访问数据。
Management Services & Utilities、SQL Interface、Parser、Optimizer 和 Caches & Buffers 属于 SQL 层,详细说明如下表所示。
名称说明Management Services & UtilitiesMySQL 的体系管理和控制工具,包罗备份恢复、MySQL 复制、集群等。SQL Interface(SQL 接口)用来接收用户的 SQL 命令,返回用户需要查询的结果。比方 SELECT FROM 就是调用 SQL Interface。Parser(查询解析器)在 SQL 命令传递到解析器的时间会被解析器验证和解析,以便 MySQL 优化器可以识别的数据布局或返回 SQL 语句的错误。Optimizer(查询优化器)SQL 语句在查询之前会利用查询优化器对查询举行优化,同时验证用户是否有权限举行查询,缓存中是否有可用的最新数据。它利用“选取-投影-连接”计谋举行查询。 比方 SELECT id, name FROM student WHERE gender = "女";语句中,SELECT 查询先根据 WHERE 语句举行选取,而不是将表全部查询出来以后再举行 gender 过滤。SELECT 查询先根据 id 和 name 举行属性投影,而不是将属性全部取出以后再举行过滤,将这两个查询条件连接起来生成最终查询结果。Caches & Buffers(查询缓存)假如查询缓存有掷中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存构成的,比如表缓存、记录缓存、key 缓存、权限缓存等。 3. 存储引擎层

Pluggable Storage Engines 属于存储引擎层。存储引擎层是 MySQL 数据库区别于其他数据库最焦点的一点,也是 MySQL 最具特色的一个地方。重要负责 MySQL 中数据的存储和提取。
因为在关系数据库中,数据的存储是以表的情势存储的,以是存储引擎也可以称为表范例(即存储和操纵此表的范例)。
4. 文件体系层

文件体系层重要是将数据库的数据存储在操纵体系的文件体系之上,并完成与存储引擎的交互。
说明:学习阅读完本节内容,相识 MySQL 体系布局即可,教程后面会详细介绍每个模块。
9.如何学习数据库(新手必看)?

很多初学者在数据库学习的时间,由于学习难度较大,每每不知所措,容易打击学习的自信心,没有了学习的兴趣,这些都是难以克制的。下面重要介绍作为初学者应该怎么学习 MySQL。
初学者学习 MySQL 必须掌握的知识点如下:


[*]MySQL 的下载安装。认识 MySQL 的配置文件,目次布局。
[*]MySQL 服务器的启动,登录与退出。
[*]MySQL 常用命令及语法规范。
[*]MySQL 数据范例与数据表的操纵。比方,数据表的增删改查、单表查询、多表查询等。
[*]MySQL 运算符和函数,比方,日期函数,时间函数,信息函数,聚合函数,加密函数,自定义函数等。
[*]MySQL 存储过程,存储过程的调用。
[*]MySQL 各个存储引擎的特点,如何选择合适的存储引擎等。
[*]MySQL 事务的概念和利用等。
[*]MySQL 权限管理和用户管理等。
10.如何高效的学习 MySQL

1)造就兴趣

兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地进步学习服从,当然学习数据库也不破例。
2)及时学习新知识

精确、有用地利用学习资源,可以参考别人解决题目的思路和经验,纵然获取掌握最新的知识。
3)多练习、多操纵

数据库体系具有极强的操纵性,以是要想熟练的掌握数据库,就必须经常上机练习。只有实际操纵利用才能发现题目。通常环境下,数据库管理员工作的时间越长,其工作经验就越丰富。很多复杂的题目,都可以根据数据库管理员的经验来很好地解决。上机练习的过程中,可以将学到的数据库理论知识理解得更加透彻。
4)多编写SQL语句

SQL 语句是数据库的魂魄。数据库中的很多操纵都是通过 SQL 语句来实现的。虽然现在的数据库都有易用的图形界面,可以直接在图形界面上创建数据库和表。但是,图形界面却粉饰了这些操纵是如何实现的。只有经常利用 SQL 语句来操纵数据库中的数据,才能更加深刻地理解数据库。
5)通过 Java 等编程语言来操纵数据库

开发的软件体系中都需要利用数据库。软件开发者学习数据库的最终目的就是在软件开发中利用数据库。因此,在学习过程中,多思索一下如何利用 Java 等程序语言来操纵数据库。最好多编一些程序来操纵数据库。如许,既可以加深对数据库的理解,也可以进步本身的编程能力。
6)数据库理论知识不能丢

盘算机领域的技术非常夸大基础,刚开始学习可能还认识不到这一点,但是随着技术应用的深入,只有有着踏实的基础功底,才能在技术的道路上走得更快、更远。
数据库理论知识是学好数据库的基础,虽然理论知识会有点枯燥,但是这是学好数据库的前提。假如没有理论基础,学习的东西就不踏实。比方,数据库理论中会讲解 E-R 图、数据库设计原则等知识,假如不相识这些知识,就很难独立设计一个很好的数据库及表。可以将理论和实例结合在一起来学习,如许服从会更高。
11.启动MySQL服务的两种方式(图解)

MySQL 服务和 MySQL 数据库差别,MySQL 服务是一系列的配景历程,而 MySQL 数据库则是一系列的数据目次和数据文件。MySQL 数据库必须在 MySQL 服务启动之后才可以举行访问。本节重要介绍如何启动 MySQL 服务。
Windows 体系下启动克制 MySQL 服务的方式重要有以下两种:

[*]通过盘算机管理方式
[*]通过命令行方式
通过盘算机管理方式

通过 Windows 的服务管理器检察修改,步骤如下:
步骤 1):在桌面上右击“此电脑”→“管理”命令,如图所示。
https://img-blog.csdnimg.cn/img_convert/cfe84a29d96533a83a3ccca0f2427da6.png
步骤 2):弹出“盘算机管理”对话框,双击“服务和应用程序”,用户可检察盘算机的服务状态,MySQL 的状态为“正在运行”,表明该服务已经启动,如图所示。
https://img-blog.csdnimg.cn/img_convert/874bf2e53da1d3329f08e44f07d75f0a.png
在图中可以看到,服务已经启动,而且启动范例为自动。假如没有“正在运行”字样,说明 MySQL 服务未启动。
可以在此处鼠标右击选择属性进入“MySQL的属性”的界面,如图所示。
https://img-blog.csdnimg.cn/img_convert/56a5aa838686c29a0d75abb318217a9b.png
可以在 MySQL 的属性界面中设置服务状态。可以将服务状态设置为“启动”、“克制”、“停息”和“恢复”命令。
还可以设置启动范例,在启动范例处的下拉菜单中可以选择“自动”、“手动”和“禁用”。这 3 种启动范例的说明如下:

[*]自动:MySQL 服务是自动启动,可以手动将状态变为克制、停息和重新启动等。
[*]手动:MySQL 服务需要手动启动,启动后可以改变服务状态,如克制、停息等。
[*]已禁用:MySQL 服务不能启动,也不能改变服务状态。
   假如需要经常练习 MySQL 数据库的操纵,可以将 MySQL 设置为自动启动,如许可以克制每次手动启动 MySQL 服务。当然,假如利用 MySQL 数据库的频率很低,可以考虑将 MySQL 服务设置为手动启动,如许可以克制 MySQL 服务长时间占用体系资源。
通过命令行方式

可以通过 DOS 命令启动 MySQL 服务,点击“开始”菜单,在搜索框中输入“cmd”,以管理员身份运行,按回车键,弹出命令提示符界面。然后输入net start mysql,按回车键,就能启动 MySQL 服务,克制 MySQL 服务的命令为net stop mysql,如图所示。
https://img-blog.csdnimg.cn/img_convert/dc709fe11feba7641ca0deaddb2d3dff.png
注意:net start mysql57和net stop mysql57命令中的 mysql57 是 MySQL 服务器名称,假如你的 MySQL 服务名称是 DB 或其它的名字,应该输入net start DB或其它名称,否则提示服务名无效。
12.结合实例,彻底搞懂数据库设计的三大范式

为了建立冗余较小、布局公道的数据库,设计数据库时必须遵循肯定的规则。在关系型数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的聚集。关系型数据库中的关系必须满足肯定的要求,即满足差别的范式。
目前关系型数据库有六种范式,分别为:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。要求最低的范式是第一范式。第二范式在第一范式的基础上又进一步的添加了要求,其余范式依次类推。
一样平常说来,数据库只需满足第三范式就行了,而通常我们用的最多的就是第一范式、第二范式、第三范式,也就是接下来要讲的“三大范式”。
1)第一范式

第一范式(1NF)用来确保每列的原子性,要求每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元)。
比方,客人留宿信息表 (姓名, 客人编号, 地址, 客房号, 客房形貌, 客房范例, 客房状态, 床位数, 入住人数, 价格)。
此中,“地址”列还可以细分为国家、省、市、区等,甚至有的程序还把“姓名”列也拆分为“姓”和“名”等。假如业务需求中不需要拆分“地址”和“姓名”列,则该数据表符合第一范式,假如需要将“地址”列拆分,则下列写法符合第一范式:
客人留宿信息表(姓名, 客人编号, 国家, 省, 市, 区, 门牌号, 客房号, 客房形貌, 客房范例, 客房状态, 床位数, 入住人数, 价格)。
2)第二范式

第二范式(2NF)在第一范式的基础上更进一层,要求表中的每列都和主键相关,即要求实体的唯一性。假如一个表满足第一范式,并且除了主键以外的其他列全部都依靠于该主键,那么该表满足第二范式。
客人留宿信息表中的数据重要用来形貌客人留宿信息,以是该表主键为(客人编号,客房号):


[*]“姓名”列、“地址”列➡“客人编号”列。
[*]“客房形貌”列、 “客房范例”列、“客房状态”列、“床位数”列、“入住人数”列、“价格”列➡“客房号”列。
此中,“➡”符号代表依靠。以上各列没有全部依靠于主键(客人编号,客房号),只是部分依靠于主键,不符合第二范式。
利用第二范式后,客人留宿信息表可以分解成以下两个表:


[*]客人信息表(客人编号,姓名,地址,客房号,入住时间,结账日期,押金,总金额),主键为“客人编号”列,其他列都全部依靠于主键列。
[*]客房信息表(客房号,客房形貌,客房范例,客房状态,床位数,入住人数,价格),主键为“客房号”列,其他列都全部依靠于主键列。
3)第三范式

第三范式(3NF)在第二范式的基础上更进一层,第三范式是确保每列都和主键列直接相关,而不是间接相关,即限制列的冗余性。假如一个关系满足第二范式,并且除了主键以外的其他列都依靠于主键列,列和列之间不存在相互依靠关系,则满足第三范式。
为了更好的理解第三范式,这里我们需要相识传递依靠。假设A、B 和 C 是关系 R 的三个属性,假如 A➡B 且 B➡C,则从这些函数依靠中,可以得出 A➡C。如上所述,依靠 A➡C 称之为传递依靠。
以第二范式中的客房信息表为例,初看该表时没有题目,满足第三范式,每列都和主键列“客房号”相关,再细看会发现:


[*]"床位数” 列、“价格”列➡“客房范例”列。
[*]“客房范例”列➡“客房号”列。
[*]“床位数”列、“价格”列➡“客房号”列
为了满足第三范式,应该去掉“床位数”列,“价格”列和“客房范例”列,将客房信息表分解为如下两个表。


[*]客房表(客房号,客房形貌,客房范例编号,客房状态,入住人数)
[*]客房范例表(客房范例编号,客房范例名称,床位数,价格)
主键与外键在多表中的重复出现不属于数据冗余,非键字段的重复出现才是数据冗余。在客房表中客房状态存在冗余,需要举行规范化,规范化以后的表如下:


[*]客房表(客房号,客房形貌,客房范例编号,客房状态编号,入住人数)。
[*]客房状态表(客房状态编号,客房状态名称)
最后,满足三大范式的 E-R 图如下所示:
https://img-blog.csdnimg.cn/img_convert/c63b4dfe76383c8bfc397eb99e94e995.png
满足三大范式的数据库模子图如下所示:
https://img-blog.csdnimg.cn/img_convert/c8d205d354fd9e3bc5c3b3b919e73cc0.png
4)反范式化

不满足范式的数据库设计,就是反范式化。
我们需要知道对于项目的最终用户来说,用户关心的是方便,清楚的数据结果。以是在设计数据库时,设计职员和客户在数据库的设计规范化和性能之间会有肯定的抵牾。
上面我们通过三大范式将客房表分解出两个表,为了满足客户的需求,最终可能需要通过三个或四个表之间的连接查询,来得到客户需要的数据结果,插入数据同样如此,对于客户输入的数据,我们需要分开插入到三个或四个差别的表中。
由此可以看出,为了满足三大范式,我们的数据操纵性能会受到相应的影响。
以是,在实际的数据库设计中,既要考虑三大范式,克制数据的冗余和各种数据操纵非常,又要考虑数据访问性能。为了减少表连接,进步数据库的访问性能,也可以答应适当的数据冗余列,这也许就是最合适的数据库设计方案。
比如,有一张存放商品的基本表,数据表中包罗“单价”、“数量”“金额”等字段。“金额”这个字段就说明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。
网上学习资料一大堆,但假如学到的知识不成体系,遇到题目时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份体系化的资料的朋友,可以添加V获取:vip1024b (备注Go)
https://img-blog.csdnimg.cn/img_convert/2c20ec16ced93076193b10e246ef69e3.jpeg
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术互换、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习发展!
img_convert/c8d205d354fd9e3bc5c3b3b919e73cc0.png)
4)反范式化

不满足范式的数据库设计,就是反范式化。
我们需要知道对于项目的最终用户来说,用户关心的是方便,清楚的数据结果。以是在设计数据库时,设计职员和客户在数据库的设计规范化和性能之间会有肯定的抵牾。
上面我们通过三大范式将客房表分解出两个表,为了满足客户的需求,最终可能需要通过三个或四个表之间的连接查询,来得到客户需要的数据结果,插入数据同样如此,对于客户输入的数据,我们需要分开插入到三个或四个差别的表中。
由此可以看出,为了满足三大范式,我们的数据操纵性能会受到相应的影响。
以是,在实际的数据库设计中,既要考虑三大范式,克制数据的冗余和各种数据操纵非常,又要考虑数据访问性能。为了减少表连接,进步数据库的访问性能,也可以答应适当的数据冗余列,这也许就是最合适的数据库设计方案。
比如,有一张存放商品的基本表,数据表中包罗“单价”、“数量”“金额”等字段。“金额”这个字段就说明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。
网上学习资料一大堆,但假如学到的知识不成体系,遇到题目时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份体系化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-bKOv41PH-1713225299382)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术互换、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习发展!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据库基础、利用C语言构建一个数据库、SQL语言、MySQL_c语言数据库(1)