首页云计算数据库基础、使用C语言构建一个数据库、SQL语言、MySQL_c语言数据库

数据库基础、使用C语言构建一个数据库、SQL语言、MySQL_c语言数据库

时间2024-07-28 06:19:52发布ongwu分类云计算浏览55

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vIP1024b (备注go)

正文 1.什么是数据库

数据库就是英文的“database”翻译来的,data + base,故名思义就是数据的根源,数据的基础。那么为什么要有数据库呢,数据库首先是个计算机软件,在所谓数据库诞生之前,常用方法可能是程序员自己写一个小程序来完成数据处理分析这样的工作。

伴随着计算机的普及,越来越多的场景开始使用计算机,产生了越来越多的数据,也催生了越来越多的数据分析需求。为了降低数据分析的门槛,让更多人能够更方便高效地管理分析数据,工程师们就打造了一种专门的软件帮助人们对数据进行合理的存储以提高存取效率,提供易用的接口和丰富的分析算法以方便使用,集成有效的管理工具以提高数据安全性等等,这就是数据库,也被称为数据库管理系统(DBMS,Database management system)。

数据库是一整套数据管理体系,包括数据存储的模型、数据组织的架构数据分析算法数据管理工具以及数据访问接口等等。

举个例子,粮仓。如果你有1亩3分地,产的粮食刚刚够一家人吃,吃不完的自己找个缸就放下了,这个缸也只需要方便自己家人使用就行了。随着你种的地越来越多比如1万亩地,生产的粮食根本吃不完,那就必须修建一个专门用来存放粮食的仓库,同时还要方便不同的商家来拉粮食,为了保证粮食存放的安全和效率,就必须对粮仓进行特殊的设计和处理,比如恒温恒湿、自动喷淋、传送系统等等。数据库也是类似的道理。

数据库起源于阿波罗登月计划,因为需要大量的数据分析人员对大量的数据进行分析,就不得不开发一款能够方便更多人使用的数据管理分析软件。确实是人类当时的灯塔,研发出了多少好东西,不得不给NASA的工程师们点个赞。

2.数据库的核心功能是什么

数据库会根据应用场景的不同而分为不同的类别,比如最经典的分类OLTP(在线事务处理)和OLAP(联机分析处理)。举个例子,你每天要使用信用卡支付来坐地铁,买午餐、买饮料、上淘宝购物等等,这每一笔交易都需要后台数据库准确地记录下来,这个数据库就是OLTP类型。

你也会通过系统查询你上个月的消费情况,系统会根据你上个月的交易数据做个汇总发给你,并告诉你吃饭花了多少、交通花了多少、娱乐花了多少等等,支持这个场景的就是OLAP类型。

OLTP主要处理短小的事务,要求事务吞吐量很高,因为每个人每天可能要支十几次,但每次需要处理的数据量比较小;而OLAP,每个人可能每个月只用一次,但是每次要处理的数据量相对比较大,而且计算比较复杂。

近年来,伴随着人工智能、物联网、边缘计算等数字化场景的兴起,数据库功能也产生了更多的分类,如HATP(同时能够处理OLTP和OLAP的场景)、流式数据处理、时序数据处理、非结构化数据处理、跨平台数据处理、多模态数据处理等等。如何理解这些分类呢?

类似于不同功能的汽车,有货车,有客车,有MPV,有SUV,有皮卡,有燃油车,有新能源车等等。车的核心功能是一致的,只是为了适应不同的场景和需求,不同的车会有不同的架构设计和调教,如此而已。

那么数据库应该有哪些核心功能呢?

首先,数据库数据库,必须要把数据保存下来。要把数据按照合理的格式,安全保存在可持久化的存储介质里面,要保证数据的正确性、完整性和安全性。这是所有数据系统最核心的功能。换句话说,把数据交给数据库数据库要保证数据不丢、不错。这个是最最起码的要求。正如粮仓,不能粮食存进去都发霉了,被耗子吃了。

其次,数据库要尽可能提高数据存取效率。要用更有效率的方式存储数据,让数据存储得更快,更易于使用者理解,更方便上层业务的使用。查询数据时效率更高,更快给出结果。就像有人来送粮食入库,要快速地称重、烘干、质检、打包、入库,不能让人家等一礼拜。有人要买小麦,有人要买玉米,必须按照要求快速找到相应的存放地点把粮食交给粮商。

再次,数据库要提供丰富的数据分析算法,尽可能把跟数据密切相关的计算在数据库中完成,减少数据传输的开销,减轻上层业务逻辑的计算压力。就像粮库要提供完善的粮食处理措施,比如称重、烘干、打包、品质分级等,方便粮食交易。

最后,数据库要提供易于使用的接口,降低数据分析人员的使用门槛,能够支持各种数据分析工具,让使用数据更加方便。就像粮库要有方便的停车场、清晰的指示牌、专业友好的工作人员等。

3.数据库的核心组件有哪些

为了实现这些核心功能,通常数据库会包括以下核心组件

a. 存储管理

数据用什么样的方式来组织、存储,是key-value还是关系型,是按行存还是按列存,支不支持压缩,支不支持删除修改支持什么样的数据类型和存储接口,Posix还是对象存储。是否要支持计算存储分离,是否要支持分布式存储,是否支持事物处理,是否支持多副本,采用什么算法来加速数据的检索(索引)等等。存储管理数据库的核心组件解决存储管理问题数据库问题解决了一半了。

b. 查询优化

要提高数据查询的效率,数据库必须找到一条最优化的执行路径,比如,查询时是否需要使用索引,如果有多个索引,应该选择哪一个,如果数据分布在不同的存储单元(表、集合等)里,应该按照什么顺序来访问效率最高等等。优化器面对的问题可能是一个极其复杂的路径规划问题,需要它在很短的时间里计算出最优路径,需要大量核心优化算法。属于数据库中复杂程度最高的部分。

举个例子,你要带着全家人,包括老人、小孩一起从上海去海南旅行,要制作一个性价比最好、家人满意度最高的计划,那么在计划时需要考虑哪些因素呢,首先,怎么去,是开车去,还是火车去,还是飞机去。开车,路上要花多久,中间需要休息几次,你和太太有没有时间,老人孩子是不是受得了,汽油费用,过路费用;飞机,怎么去机场,行李有多少,带不带的下,机票有没有打折,下了飞机怎么办等等。住什么酒店,去什么景点,老人喜欢去人多的人文景观,太太喜欢安静的地方和方便购物的地方,小孩喜欢有游乐场的地方,要不要酒店+景点一起订,会不会有优惠,要不要租车,租什么车…说到这里,是不是可以体会一个查询优化器需要考虑的问题有多少?

当然,这部分工作可以有相对简单的实现(基于规则),比如太太说了,时间确定、飞机来回、五星酒店、带私人沙滩。这样计划就会简单很多,也可以复杂到难以想象(基于机器学习、基于实际开销等等),太太说你全权负责,具体时间不确定,大概在8月-9月,要少花钱多办事,多做调研,找一个最优方案。那么做这个计划就会非常复杂,需要的支持决策信息就会非常多。这样做出来的决策大概率相对会优化,比基于规则实现的计划能适应更多场景。

c. 执行模块

优化器做好了执行计划后,接下来就会有执行的模块按照执行计划对数据进行相关的计算,包括数据的存取、常规的加减乘除、排序、平均值、哈希,也会包括一些机器学习的算法数据压缩/解压缩,最后将计算完成的结果返回给客户端

d. 内部管理和调度

数据库要正常的工作,还会需要一些内部协调管理模块,比如,内存和存储同步,存储空间整理,元数据管理集群状态检测,容错和故障恢复等。

e. 管理工具接口

为了提高易用性,数据库都需要提供一套管理工具,比如备份/恢复、状态检测、运行时监控资源隔离、权限管理安全审计、自定义接口、各种数据访问接口等。

4.数据库发展和展望

数据库发展是伴随着计算机体系架构发展而不断演进的,从主机,到个人电脑+网络(x86),到现在的云服务数据库也经历了一系列的演化历程。

a. 主机时代

最初的计算机和数据库只是在航空航天、军事领域使用,只需要支持专业的数据分析人员进行数据分析。到了上世纪70年代末,伴随着计算机进入更多的商业场景,产生了大量的数据分析的需求,数据库就需要面对更为普遍的用户需求。在IBM最早发布关系数据库的论文中,最强调的一点就是希望能够让数据库用户不用再去操心数据应该如何存储和组织,而能够高效率使用这些数据进行分析

为了方便用户的使用,SQL(结构化查询语言)被定义了出来,按照这样的语法,数据库用户只需要关注数据该如何分析,不需要关注底层的数据分布和存储等。

为了要支持大量用户的并发数据操作数据库事务特性被定义了出来,保证在并发的数据操作下,用户能够看到符合业务逻辑的数据内容。

为了保证数据库的高效率和安全性,数据库重做日志(事务日志)被设计出来,包括当前数据库中经常出现的一系列概念,比如回滚日志(Undo Log)、提交日志(commit log)、检查点(checkpoint)等等。

主机时代由于硬件成本极其昂贵,不论是存储、内存还是CPU资源,相对来说都很稀缺,那么数据库设计和使用上就会采用各种算法架构来降低对内存的使用,减少数据的冗余,提高数据的检索效率,因此各种数据索引类型,功能强大的查询优化器,数据缓存算法等在数据库中得到了极大的发展。同时在使用数据库时,也要对数据进行各种复杂的模型设计(3范式模型,星型模型,雪花型模型等等)以降低数据的冗余程度,当然这样也会增加数据库应用开发难度。

b. x86时代

伴随着x86服务器的广泛使用和网络技术发展,把N台x86服务通过网络组建成一个集群,利用这个集群的计算、存储能力来取代昂贵的主机也就更加具有性价比。在这种趋势下,也就设计出了各种能够使用集群能力的分布式数据库系统,这些系统的核心思想就是把数据分散在不同的节点上,利用多个节点的计算和存储资源提高对数据存储分析能力。在分布式的处理架构下,数据一致性协议、多副本机制、高可用机制、数据分片机制、扩容/缩容机制等等也都成为了分布式数据库必须要设计解决问题

在x86时代,由于硬件成本的大幅下降,用户更多关注数据分析的灵活性和交付的效率。因此,使用数据库时更多会关注如何加快数据分析的过程、如何让数据更易于人类理解,而不需要为了降低数据的冗余而进行复杂的模型构建。

c. 云时代

随着技术的进一步发展,通过把传统硬件虚拟化/容器化等技术,提高硬件资源的使用效率,降低生产运维成本的云服务被越来越多企业采用。为了更好地适应云服务技术体系,数据库设计出了相关的云特性,比如存储计算分离、弹性伸缩、微服务化、跨域数据同步等等。

云时代,用户更加关注数据分析的效率和投入产出比,更加关注产品是否能够提供便利的一体化数据处理服务,让业务开发者能够更加专注于业务本身,而数据库服务也在朝着标准化云服务的方向不断演进。

d. 展望

不同的数据库架构部署方式不是一个简单的迭代和取代的关系,而是在很长一段时间里会同时存在并且逐步迭代的过程。时至今日,依然有不少金融机构会选择使用在主机上的数据库产品,只是新的业务和场景非常有限。而基于x86服务器数据处理产品,还是当前企业数据库的主流选择。与此同时,云数据库市场份额也在逐步增长和扩大。采用何种数据库产品要根据自身的业务需求来决定,合适的就是最好的。当然从技术演进的方向上看,云技术(包括公有云和私有云)会是大势所趋,因为云能够提供更高的效率。

数据库作为信息产业的三大基础技术(还有芯片和操作系统)之一,在相当长的时间里,不论从资本还是技术方面都非常火热,国内近几年来也出现了相当多优秀的数据库产品和企业。在人类迈向数字化文明的进程中,必定会产生越来越多的数据,也需要从数据中挖掘出更多的价值,而数据库作为承载数据的核心,也必将持续发挥重要作用。有幸一直在从事这个领域的工作,期待与广大同仁一道为人类数字化技术的进步贡献力量。

二、使用C语言实现一个简单的数据库

这边推荐几篇博客:

(C语言)数据库简单实现

[小项目]c语言实现数据库操作(低仿)

c简易实现数据库

三、使用C语言连接数据库

当然大家基本不会使用自己写的数据库,一般都是使用专业的数据库

下面我们看看怎么使用C语言来连接数据库

安装一下MySQL,可以参考这篇博客:超级详细的mysql数据库安装指南

我的安装路径为:C:\Program Files\MySQL

include目录中就包括我们C语言连接数据库所需要的头文件

要想使用C语言来连接MySQL数据库,我们需要将头文件路径和库文件路径加入进来。

可以看看下面的文章来看看一些具体的操作

C语言操作mysql范例(增删查改)

c语言连接数据库以及对数据库操作

四、SQL语言和MySQL教程 1.SQL是什么

SQL 是一种操作数据库语言,包括创建数据库删除数据库查询记录、修改记录、添加字段等。SQL 虽然是一种被 ANSI 标准化的语言,但是它有很多不同的实现版本

ANSI 是 American National Standards Institute 的缩写,中文译为“美国国家标准协会”。

SQL 是 Structured Query Language 的缩写,中文译为“结构化查询语言”。SQL 是一种计算机语言,用来存储、检索和修改关系数据库存储数据

SQL 是关系数据库标准语言,所有的关系数据库管理系统RDBMS),比如 MySQL、Oracle、SQL Server、MS Access、Sybase、Informix、Postgres 等,都将 SQL 作为其标准处理语言

此外,SQL 也有一些变种,就像中文有很多方言,比如:

微软的 SQL Server 使用 T-SQL;Oracle 使用 PL/SQL;微软 Access 版本的 SQL 被称为 JET SQL(本地格式)。

SQL 的用途

SQL 之所以广受欢迎,是因为它具有以下用途:

允许用户访问关系数据库系统中的数据;允许用户描述数据;允许用户定义数据库中的数据,并处理该数据;允许将 SQL 模块、库或者预处理器嵌入到其它编程语言中;允许用户创建删除数据库、表、数据项(记录);允许用户数据库创建视图、存储过程、函数;允许用户设置对表、存储过程和视图的权限

SQL 简史

1970 年,IBM 的 Edgar Frank “Ted” Codd(埃德加·弗兰克·科德)博士描述了关系数据库的模型,他因此被称为“关系数据库之父”。

1974 年,IBM 希望把 Codd 的想法变成现实,着手开发一款名为 System R 的数据库,并研发出一套结构化查询语句 SEQUEL,这就是 SQL 的雏形。System R 数据库于 1978 年第一次发布,用于科研和实验。

1979 年,Oracle 公司首先提供商用的 SQL,随后 IBM 公司也在 DB2 数据库中实现了 SQL。

1986 年 10 月,美国 ANSI 采用 SQL 作为关系数据库管理系统标准语言,紧接着国际标准组织(ISO)也将 SQL 采纳为国际标准

1989 年,ANSI 发布了 SQL 标准的重大更新版本,以弥补旧版的不足,称为 ANSI SQL 89,该版本也被 ISO 采纳。

目前,市场上主要的关系数据库都有自己的 SQL 变种, 但是它们都遵守 ANSI SQL 89 标准

SQL 执行过程

当你在任何一款 RDBMS 中执行 SQL 命令时,系统首先确定执行请求的最佳方式,然后 SQL 引擎将会翻译 SQL 语句,并处理请求任务。

整个执行过程包含了多种组件,比如:

查询调度程序优化引擎;传统的查询引擎;SQL 查询引擎。

传统查询引擎能够处理所有的非 SQL 命令,但是 SQL 引擎并不能处理逻辑文件

下图展示了 SQL 的体系结构:

SQL 命令

关系数据库有关的 SQL 命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE、DROP 等,根据其特性,可以将它们分为以下几个类别。

1) DDL - Data Definition Language,数据定义语言

数据的结构和形式进行定义,一般用于数据库和表的创建删除修改等。

命令说明CREATE用于在数据库创建一个新表、一个视图或者其它对象。ALTER用于修改现有的数据库,比如表、记录。DROP用于删除整个表、视图或者数据库中的其它对象
2) DML - Data ManIPulation Language,数据处理语言

数据库中的数据进行处理,一般用于数据项(记录)的插入、删除修改查询

命令说明SELECT用于从一个或者多个表中检索某些记录。INSERT插入一条记录。UPDATE修改记录。DELETE删除记录。
3) DCL - Data Control Language,数据控制语言

控制数据访问权限,只有被授权的用户才能进行操作

命令说明GRANT向用户分配权限。REVOKE收回用户权限
2.常用数据库访问接口简介

不同的程序设计语言会有各自不同的数据库访问接口程序语言通过这些接口,执行 SQL 语句,进行数据库管理。主要的数据库访问接口主要有 ODBC、JDBC、ADO.NET 和 PDO。

ODBC

ODBC(Open Database Connectivity,开放数据库互连)为访问不同的 SQL 数据库提供了一个共同的接口。ODBC 使用 SQL 作为访问数据标准。这一接口提供了最大限度的互操作性。一个应用程序可以通过共同的一组代码访问不同的 SQL 数据库管理系统

一个基于 ODBC 的应用程序数据库操作不依赖任何 DBMS,不直接与 DBMS 打交道,所有的数据库操作由对应的 DBMS 的 ODBC 驱动程序完成。也就是说,不论是 MySQL 还是 Oracle 数据库,均可用 ODBC API 进行访问。由此可见,ODBC 的最大优点是能以统一的方式处理所有的数据库

JDBC

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 是甲骨文公司的一款关系数据库管理系统,在数据库领域一直处于领先地位的产品,是目前世界上流行的关系数据库之一,是一种高效率、可靠性好、适应高吞吐量的数据库方案。

Oracle图标

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

向下兼容指的是高版本支持版本的或者说后期开发版本支持和兼容早期开发版本

缺点: 对硬件的要求高价格比较昂贵管理维护麻烦操作比较复杂 2)SQL Server

SQL Server 是 Microsoft(微软)公司推出的关系数据库管理系统,主要应用于大型的管理系统中。

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 是最好的应用软件之一。

MySQL图标

优点: 性能卓越服务稳定,很少出现异常宕机开放源代码且无版权制约,自主性强、使用成本低。历史悠久、社区及用户非常活跃,遇到问题,可以很快获取到帮助软件体积小,安装使用简单,并且易于维护,安装及维护成本低。支持多种操作系统,提供多种 API 接口支持多种开发语言。 缺点: MySQL 最大的缺点是其安全系统,主要是复杂而非标准,只有调用 mysqladmin 来重读用户权限才会发生改变。MySQL 不允许调试存储过程,开发和维护存储过程很难。MySQL 不支持备份。MySQL 的价格随平台安装方式变化。 4)Access

Access 是由 Microsoft(微软)发布的小型关系数据库管理系统,是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统

Access图标

优点: 存储方式简单,易于维护管理。Access 的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb 或 .accdb)的数据库文件中,便于用户操作管理。Access 是一个面向对象的开发工具,这种基于面向对象的开发方式,使得开发应用程序更为简便。界面友好、易操作。Access 是一个可视化工具,风格与 windows 完全一样,用户想要生成对象应用,只要使用鼠标进行拖放即可,非常直观方便。系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。集成环境,可以处理多种数据信息。Access 基于 windows 操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。支持广泛,易于扩展,弹性大。Access 是一个既可以只用来存放数据数据库,也可以作为一个客户端开发工具来进行数据库应用系统开发。即可以开发方便易用的小型软件,也可以用来开发大型的应用系统。 缺点: 不支持并发处理。数据库存储量小安全性不够高。Access 是小型数据库,当数据量过大时,一般百M以上(纯数据,不包括窗体、报表等客户端对象)性能会变差。虽然理论上支持 255 个并发用户,但实际上根本支持不了那么多,如果以只读方式访问大概在 100 个用户左右,而如果是并发编辑,则大概在10-20个用户。单表记录数过百万时,性能就会变得较差,如果加上设计不良,这个限度还要降低。不能编译成可执行文件(.exe),必须要安装 Access 运行环境才能使用。 5)DB2

DB2 是美国 IBM 公司开发的一款支持多媒体、Web 的关系数据库管理系统。主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境

DB2图标

优点: 相比较 MySQL 和 Oracle 两种数据库来说,DB2 提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模地应用程序执行能力,具有与平台无关的基本功能和 SQL 命令。DB2 采用了数据分级技术,能够使大型数据很方便的下载数据库服务器,使数据库本地化和远程连接透明化。拥有非常完备的查询优化器,改善了查询性能,并支持多任务并行查询。具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统更加使用。DB2 可跨平台使用。 缺点: 配置文件和参数多,且命名不规范。一些 DB2 产品开发不方便。和 Oracle 相比,命令多,且没 Oracle 统一规范的好。由于其设计框架问题,如果用户数据库的本身优化应用程序优化做的不足,那么 DB2 容易出现锁等待现象。 6)PostgreSQL

PostgreSQL 是一款富有特色的自由数据库管理系统,甚至可以说是最强大的自由软件数据库管理系统。该数据库管理系统支持了目前世界上最丰富的数据类型。是自由软件数据库管理系统中唯一支持事务、子查询、多版本并行控制系统数据完整性检查等特性的自由软件

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(学号)等。

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;

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vIP1024b (备注Go)

个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长 都包含了所有学生的某个信息,比如 name(姓名)。而每行则包含了某个学生的所有信息,即 id(编号)、name(姓名)、 age (年龄)、stuno(学号)等。

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;

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vIP1024b (备注Go) [外链图片转存中…(img-kFQxkDwn-1713225335583)]

个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长

Ongwu博客 版权声明:以上内容未经允许不得转载!授权事宜或对内容有异议或投诉,请联系站长,将尽快回复您,谢谢合作!

展开全文READ MORE
在Linux环境下搭建Redis服务结合内网穿透实现通过GUI工具远程管理数据库 HarmonyOS Next 数据库版本升级案例,2024年最新鸿蒙面试基础题

游客 回复需填写必要信息