目录
一、数据库相关概念
二、关系型数据库
2.1. 关系型数据库特点
2.2. 主流的关系型数据库
三、MySQL概念
四、MySQL特性
五、MySQL存储引擎
六、应用场景
一、数据库相关概念
数据库是在 20 世纪 60 年代末发展起来的一项重要技术,20 世纪 70 年代以来数据库技术得到迅猛发展,已经成为计算机科学与技术的一个重要分支。数据库技术和系统已经成为信息基础设施的核心技术和重要基础,数据库技术作为数据管理的最有效的手段,极大地促进了计算机应用的发展。
数据库是一个长期存储在计算机内的、有组织的、可共享的统一管理的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
数据库技术主要是用来解决数据处理的非数值计算问题,其主要功能包括数据的存储、查询、修改、排序和统计等。数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。
数据库管理系统(DBMS)是用于管理数据库的软件,如我们日常开发中接触到的MySQL、Oracle等,提供用户创建、查询和管理数据库的能力,包括数据的增、删、改、查、事务管理、备份恢复、安全性管理等。
二、关系型数据库
关系型数据库(RDBMS) ,是指采用了关系数据模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
而所谓二维表,指的是由行和列组成的表,如下图(就类似于Excel表格数据,有表头、有列、有行,还可以通过一列关联另外一个表格中的某一列数据)。简单说,基于二维表存储数据的数据库就成为关系型数据库,不是基于二维表存储数据的数据库,就是非关系型数据库。
我们可以通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库。可以使用SQL语句,通过数据库管理系统操作数据库,以及操作数据库中的表结构及数据。一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包含多行记录。
2.1. 关系型数据库特点
1.存储方式:传统的关系型数据库采用表格的储存方式,数据以行和列的方式进行存储,要读取和查询都十分方便。
2.存储结构:关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高,但带来的问题就是一旦存入数据后,如果需要修改数据表的结构就会十分困难。
3.存储规范:关系型数据库为了避免重复、规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理的就可以变得很清晰、一目了然,当然这主要是一张数据表的情况。如果是多张表情况就不一样了,由于数据涉及到多张数据表,数据表之间存在着复杂的关系,随着数据表数量的增加,数据管理会越来越复杂。
4.扩展方式:由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力。
5.查询方式:关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询,SQL早已获得了各个数据库厂商的支持,成为数据库行业的标准,它能够支持数据库的CRUD(增加,查询,更新,删除)操作,具有非常强大的功能,SQL可以采用类似索引的方法来加快查询操作。
6.规范化:在数据库的设计开发过程中开发人员通常会面对同时需要对一个或者多个数据实体(包括数组、列表和嵌套数据)进行操作,这样在关系型数据库中,一个数据实体一般首先要分割成多个部分,然后再对分割的部分进行规范化,规范化以后再分别存入到多张关系型数据表中,这是一个复杂的过程。好消息是随着软件技术的发展,相当多的软件开发平台都提供一些简单的解决方法,例如,可以利用ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不同类型系统的数据之间的转换。
7.事务性:关系型数据库强调ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),可以满足对事务性要求较高或者需要进行复杂数据查询的数据操作,而且可以充分满足数据库操作的高性能和操作稳定性的要求。并且关系型数据库十分强调数据的强一致性,对于事务的操作有很好的支持。关系型数据库可以控制事务原子性细粒度,并且一旦操作有误或者有需要,可以马上回滚事务。
8.读写性能:关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得很差,特别是遇到高并发读写的时候性能就会下降的非常厉害。
9.授权方式:关系型数据库常见的有 Oracle,SQLServer,DB2,Mysql,除了Mysql大多数的关系型数据库如果要使用都需要支付一笔价格高昂的费用,即使是免费的Mysql性能也受到了诸多的限制。
2.2. 主流的关系型数据库
Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。
MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。
目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。SQL Server:Microsoft 公司推出的收费的中型数据库,C#、.net等语言常用。
PostgreSQL:开源免费的中小型数据库。
DB2:IBM公司的大型收费数据库产品。
SQLLite:嵌入式的微型数据库。Android内置的数据库采用的就是该数据库。
MariaDB:开源免费的中小型数据库。是MySQL数据库的另外一个分支、另外一个衍生产品,与
MySQL数据库有很好的兼容性。
三、MySQL概念
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。
因此我们需要明确理解的是,MySQL内部并不包含任何自带的数据库。 MySQL 是一种关系型数据库管理系统,它提供了管理和操作数据库的功能,但并不自动创建数据库。用户需要手动创建数据库来存储和组织数据。MySQL将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
数据库是存储和管理数据的容器,可以理解为一个文件夹,用于组织和存放表、数据和其他对象。在 MySQL 中,可以使用 SQL 语句来创建数据库。例如,可以使用以下语句创建名为 "mydatabase" 的数据库:
CREATE DATABASE mydatabase;
一旦数据库创建完成,就可以在其中创建表,并向表中插入数据。通过使用 SQL 语句,可以定义表的结构、约束和索引等。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL作为网站数据库。
与其他的大型数据库例如 Oracle、DB2、SQL Server等相比,MySQL 自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。
四、MySQL特性
1. MySQL使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。
2. 支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
3. 为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
4. 支持多线程,充分利用 CPU 资源。
5. 优化的 SQL查询算法,有效地提高查询速度。
6. 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
7. 提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作数据表名和数据列名。
8. 提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。
9. 提供用于管理、检查、优化数据库操作的管理工具。
10. 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
11. 支持多种存储引擎。
12. MySQL 是开源的,所以开发者不需要支付额外的费用。
13. MySQL 使用标准的 SQL数据语言形式。
14. MySQL 对 PHP 有很好的支持,PHP是比较流行的 Web 开发语言。
15. MySQL是可以定制的,采用了 GPL协议,开发者可以修改源码来开发自己的 MySQL 系统。
16. 在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性(5.6新增)
17. 复制全局事务标志,可支持该软件修复式集群(5.6新增)
18. 复制无崩溃从机,可提高可用性(5.6新增)
19. 复制多线程从机,可提高性能(5.6新增)
20. 3倍更快的性能(5.7 新增)
21. 新的优化器(5.7新增)
22. 原生JSON支持(5.7新增)
23. 多源复制(5.7新增)
24. GIS的空间扩展 (5.7新增)
五、MySQL存储引擎
MyISAMMySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务
InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎
BDB源 自 Berkeley DB,事务型数据库的另一种选择,支持Commit 和Rollback 等其他事务特性
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失
Merge将一定数量的 MyISAM 表联合而成一个整体,在超大规模数据存储时很有用
Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive 拥有高效的插入速度,但其对查询的支持相对较差
Federated将不同的 MySQL 服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个 .csv 文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV 存储引擎不支持索引。
BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录 binlog 做复制的中继
EXAMPLE 存储引擎是一个不做任何事情的存根引擎。它的目的是作为 MySQL 源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE 存储引擎不支持编索引。
另外,MySQL 的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。
在日常开发中,针对不同的使用场景,我们需要选择使用最合适的存储引擎,比如对于历史数据,MyISAM存储引擎是一个较好的选择。
MyISAM存储引擎特别适用于读多写少的场景,尤其是历史数据存储。MyISAM以其高读取性能著称,适合于需要频繁读取但写入操作较少的场景。其特点包括:
- 表级锁定:MyISAM使用表级锁定,这意味着在执行写操作时会锁定整个表,这可能导致在高并发写操作环境中的性能下降,但对于读操作密集的应用,这种锁定机制可以减少锁的竞争,从而提高读取性能12。
- 高读取性能:MyISAM在处理大量读取操作时表现出色,适合于需要频繁读取历史数据的应用场景12。
- 文件存储:MyISAM的存储机制基于文件,数据和索引分别存储在不同的文件中,这使得数据管理更加灵活3。
- 压缩表支持:MyISAM支持表压缩,可以有效减少存储空间的使用,适合存储大量历史数据。
相比之下,InnoDB存储引擎虽然支持事务处理和外键约束,适用于需要高并发处理和数据一致性的应用场景,但其行级锁定和高资源消耗可能不适合历史数据的存储需求。InnoDB更适合于需要频繁写入和高度并发处理的应用场景
六、应用场景
Web应用程序:MySQL是Web应用程序的首选数据库之一,特别是与PHP、Python、Java等后端技术结合使用时。许多流行的Web框架和内容管理系统(CMS)如WordPress、Drupal、Joomla、Laravel、Django等都支持MySQL作为其后端数据库。MySQL提供了高性能的读写能力和可扩展性,能够处理大量的并发请求,为Web应用提供持久的数据存储解决方案。
电子商务:在电子商务网站中,MySQL用于存储用户信息、产品信息、订单详情等关键数据。由于其高性能和可扩展性,MySQL能够轻松处理大量并发请求和交易数据。著名的电子商务平台如Magento和WooCommerce都使用MySQL来管理其数据库。
企业应用:许多企业使用MySQL来构建和管理内部系统,如ERP(企业资源规划)、CRM(客户关系管理)、SCM(供应链管理)、HRM(人力资源管理)和BI(商业智能)系统等。MySQL提供了可靠的性能和安全性,能够满足企业对数据安全、完整性和性能的要求。
移动应用:许多移动应用后端使用MySQL来存储和检索数据。例如,iOS和Android应用通常通过API与MySQL数据库进行交互。
游戏开发:MySQL用于存储和管理用户信息、游戏数据、排行榜等。由于其高并发处理能力和可靠性,MySQL是游戏开发者的首选数据库系统,特别是在线多人游戏(MMO)和移动游戏广泛使用MySQL来管理其数据库。
数据分析:虽然MySQL不是一个专门的数据仓库或大数据分析平台,但它可以用于存储和分析结构化数据。MySQL提供了强大的查询功能和数据分析工具,能够满足数据分析和业务智能的需求。许多组织使用MySQL作为其数据仓库的一部分,并利用SQL查询来提取和分析数据。
物联网(IoT):在物联网应用中,MySQL可以用于存储从各种传感器收集的数据。这些数据可以用于实时监控、历史分析和决策支持。
教育和研究:MySQL也广泛应用于教育和研究领域,用于存储和管理实验数据、学生信息、课程内容等。
政府和公共部门:政府和公共部门机构使用MySQL来存储和管理公民信息、公共服务数据、统计数据等。
金融和银行:金融和银行系统使用MySQL来处理交易数据、客户信息、账户信息等敏感数据。MySQL提供了强大的安全功能,包括SSL、AES和SHA1等加密算法。