MySQL基础知识回顾
1.为什么要使用数据库
问题
如果把数据存储到内存中,那么重启后就消失了,我们希望一个数据被保存后永久存在于一个地方,也就是需要把数据持久化
什么是持久化
把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化就意味着将内存中的数据保存到硬盘上加以固化
谁来完成持久化
持久化的实现过程大多通过各种关系型数据库来完成
持久化的主要作用
将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件,XML数据文件中
2.数据库与数据库管理系统
相关概念
- DB:数据库(Database),即存储数据的仓库,其本质是一个文件系统。它保存了一系列有组织的数据
- DBMS:数据库管理系统(Database Management System),是一种操作和管理数据库的大型软件,用于建立,使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据
- SQL:结构化查询语言(Structured Query Language),专门用来与数据库通信的语言
关系图示
3.常见的数据库管理系统排名
介绍
目前互联网上常见的数据库管理软件有Oracle,MySQL,MS SQL Server,DB2,PostgreSQL,Access,Sybase,Informix这几种,如何知道那个是主流的呢?
如何查看排名
访问网站:https://db-engines.com/en/ranking
2021年排名
4.常见的数据库介绍
Oracle
SQL Server
SQL Server是微软开发的大型商业数据库,诞生于1989年。C#、.net等语言常使用,与WinNT完全集成,也可以很好地与Microsoft BackOffice产品集成
DB2
IBM公司的数据库产品,收费的。常应用在银行系统中
PostgreSQL
PostgreSQL的稳定性极强,最符合SQL标准,开放源码,具备商业级DBMS质量。PG对数据量大的文本以及SQL处理较快
SyBase
已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesiginer
SQLite
嵌入式的小型数据库,应用在手机端。零配置,SQlite3不用安装,不用配置,不用启动,关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作,再下次使用数据库的时候自动恢复
Informix
IBM公司出品,取自Information和Unix的结合,它是第一个被移植到Linux上的商业数据库产品。仅运行于unix/linux平台,命令行操作。性能较高,支持集群,适应于安全性要求极高的系统,尤其是银行,证券系统的应用
MariaDB
MySQL数据库的作者另外一个作品基本与MySQL一致
5.MySQL介绍
概述
发展历史
时间 | 事件 |
---|---|
1979年 | 当时瑞典的 Monty Widenius 在 Tcx DataKonsult公司工作,他开发了一款名为Unireg的工具,它是一个面向报表的存储引擎,利用索引顺序来读取数据,这也是 ISAM 存储引擎算法的前身 |
1985年 | Monty 和 David Axmart 等几个小伙子成立了一家公司(MySQL AB 前身),研发出了 ISAM(Indexed Sequential Access Method)存储引擎工具。 |
1990年 | 客户要求 ISAM 工具能提供SQL接口,于是Monty找到了David Hughes(mSQL的发明人)商讨合作事宜,后来发现mSQL的速度也无法满足需求。于是Monty决心自己重写一个SQL支持,由此着手MySQL设计和研发。 |
1996年 | Monty与David Axmart一起协作,开发出MySQL第一个版本1.0。 |
1996年10月 | MySQL3.1发布了,没有2.x版本。最开始只提供了Solaris下的二进制版本。同时11月发布了Linux版本 |
1999-2000年 | Monty,Allan和David三人在瑞典创建了MySQL AB公司,并且与Sleepycat合作开发出引入了BDB引擎,MySQL从此开始支持事务处理了。 |
2000年 | MySQL公布了自己的源代码,并采用GPL(GNU General Public License)许可协议正式开源。 |
20000年4月 | MySQL对旧的存储引擎ISAM进行了整理,命名为MyISAM。 |
20001年 | Heikki Tuuri 向MySQL建议集成他的InnoDB存储引擎,这个引擎同样支持事务处理,还支持行级锁。MySQL与InnoDB正式结合版本是4.0。至此MySQL已集成了MyISAM和InnoDB两大主力引擎。 |
2005年10月 | MySQL5.0版本发布,这是MySQL历史上最有里程碑意义的一个版本,在5.0版本加入了游标,存储过程和触发器的支持。 |
2008年1月 | MySQL AB公司被Sun公司以10亿美金收购,MySQL数据库进入Sun时代。 |
2009年4月 | Oracle公司以74亿美元收购Sun公司,自此MySQL数据库进入了Oracle时代,而其第三方的存储引擎InnoDB早在2005年就被Oracle公司收购。 |
2010年4月 | 发布了MySQL5.5版本。Oracle对MySQL版本重新进行了划分,分成了社区版和企业版。默认引擎更换为InnoDB,增加表分区等。 |
2013年2月 | MySQL5.6首个正式版5.6.10发布。MySQL5.6对InnoDB引擎进行了改造,提供全文索引功能,使InnoDB适合各种应用场景。 |
2015年10月 | MySQL5.7首个GA正式版5.7.9发布。 |
2016年9月 | MySQL8.0首个开发版发布,增加了数据字典,账号权限角色表,InnoDB增强,JSON增强等等。 |
2018年4月 | MySQL8.0首个GA正式版8.0.11发布 |
版本分支
版本的命名机制
- MySQL的命名机制使用由3个数字和一个后缀组成的版本号。例如,像mysql-8.0.26的版本号这样解释
- 第1个数字8是主版本号,描述了文件格式。所有版本5的发行都有相同的文件格式
- 第2个数字0是发行级别。主版本号和发行级别组合到一起便构成了发行序列号
- 第3个数字26是在此发行系列的版本号,随每个新分发版递增
主流版本
- MySQL5.5:用的较少,一般是老系统
- MySQL5.7:企业常用版本
- MySQL8:最新版,目前也算常用
不同的MySQL
针对不同的用户,MySQL分为两种不同的版本
- MySQL Community Server:社区版本,免费,但是MySQL不提供官方技术支持
- MySQL Enterprise Edition:商业版,该版本是收费版本,可以试用30天,官方提供技术支持
- MySQL Cluster:集群版,开源免费,可将几个MySQL Server封装成一个Server
- MySQL Cluster CGE:高级集群版,需付费
- MySQL Workbench(GUI TOOL):一款专为MySQL设计的ER/数据库建模工具MySQL Workbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL Workbench SE)
关于MySQL8
MySQL从5.7版本直接跳到了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验
为什么选择MySQL
- 开放源代码,使用成本低
- 性能卓越,服务稳定
- 软件体积小,使用简单,并且易于维护
- 历史悠久,社区用户非常活跃,遇到问题可以寻求帮助
- 许多互联网公司在用,经过了时间的验证
Oracle与MySQL
0racle更适合大型跨国企业的使用,因为他们对费用不敏感,但是对性能要求以及安全性有更高的要求
MySQL 由于其体积小、速度快、总体拥有成本低,可处理上千万条记录的大型数据库,尤其是开放源码这一特点,使得很多互联网公司、中小型网站选择了MySQL作为网站数据库(Facebook,Twitter,YouTube,阿里巴巴蚂蚁金服,去哪儿,美团外卖,腾讯)
6.关系型数据库(RDBMS)
介绍
关系数据库管理系统(RDBMS)是一种基于关系模型的数据库管理系统。在RDBMS中,数据以表的形式进行组织,其中每个表由行和列组成。这种表格结构使得数据之间可以建立关系并进行关联,从而有效地存储和检索数据
核心概念
- 表(Table):表是数据的主要组织单元,它由一组命名的列和行组成。每个表列定义了数据的类型和约束,而行则表示特定实体或事物的实例。表将数据分解为结构化、可管理的单元,使得数据的存储更加高效
- 列(Column):列是表中的一个字段,用于存储特定类型的数据。每个列都具有一个名称和相应的数据类型,例如整数、字符串、日期等。列的定义还可以包括约束条件,如唯一性约束、主键约束等,以确保数据的完整性和有效性
- 行(Row):行是表中的一个记录,表示某个实体或事物的具体实例。每行由一组与该表的列对应的值组成。通过在不同表中的行之间建立关系,可以对数据进行关联和链接
- 主键(Primary Key):主键是表中的一个唯一标识符,用于唯一地标识表中的每一行。主键可以由一个或多个列组成,并具有唯一性约束。主键在数据库中起到重要的作用,它可以用作数据的唯一标识和关联表之间的关系
- 外键(Foreign Key):外键是一个表中的列,它建立了与另一个表中的主键之间的关系。外键用于实现表之间的关联和引用,从而实现数据的一致性和完整性。通过外键,可以在不同的表之间建立关系和连接,以支持数据的查询和操作
关系模型概述
表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系型数据库,就是建立在关系模型基础上的数据库
与SQL的关系
SQL就是关系型数据库的查询语言
优势
- 复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询
- 事务支持:使得对于安全性能很高的数据访问要求得以实现
7.非关系型数据库(NoSQL/非RDBMS)
介绍
主要是作为RDBMS的一个补充,因为RDBMS其实是有着自己不擅长的领域,舍弃关系型数据库的一部分功能,换来一些其他的功能或更好的性能
目前市场上大部分主流的非关系型数据库都是免费的
主流产品与分类
名称 | 描述 |
---|---|
Redis | 缓存数据库 |
MongoDB | 文档数据库 |
ElasticSearch | 搜索数据库 |
Cassandra | 列式数据库 |
HBase | 列式数据库 |
总结
NoSQL对SQL做出了很好的补充,比如实际开发中,有很多业务需求,其实并不需要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种情况下,使用性能更高、 成本更低的非关系型数据库当然是更明智的选择。比如:日志收集、排行榜、定时器等
8.SQL
SQL全称
Structured Query Language/结构化查询语言
什么是SQL
SQL 是用于访问和处理数据库(RDBMS)的标准的计算机语言。
SQL的来历
SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库SystemR实现
SQL标准
美国国家标准局(ANSI)开始着手指定SQL标准,并在1986年10月公布了最早的SQL标准,扩展的标准版本是1989年发表的SQL-89,之后还有1992年制定的版本SQL-92和1999年ISO发布的版本SQL-99
SQL标准几经修改和完善,其功能更加强大,但目前很多数据库系统只支持SQL-99的部分特征,而大部分数据库系统都能支持1992年制定的SQL-92
SQL特点
- 具有综合统一性,不同数据库的支持的SQL稍有不同
- 非过程化语言
- 语言简洁,用户容易接受
- 以一种语法结构提供两种使用方式
支持SQL的数据库
- MySQL
- MariaDB
- SQL Server
- Oracle
- DB2
- Access
- Sybase
SQL语法特点简述
- SQL对大小写的关键字不敏感
- SQL语句可以单行或多行书写,以分号结束
SQL语言的组成
- 数据定义语言:DDL
- 数据操纵语言:DML
- 数据控制语言:DCL
- 数据控制语言:DCL
SQL注释
单行注释
- – 注释内容
- # 注释内容
多行注释
/*注释内容*/
SQL和数据库管理系统的关系
MySQL,SQL Server,Oracle是一个数据库软件,这些数据库软件支持标准SQL,也就是通过SQL可以使用这些软件,不过每一个数据库系统会在标准SQL的基础上扩展自己的SQL语法
大部分的NoSQL数据库有自己的操作方式,并不支持SQL的操作方式,只有小部分NoSQL支持
9.表的关联关系
介绍
表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来
表示
四种关系总览
- 一对一关联
- 一对多关联
- 多对多关联
- 自我引用
一对一关联(one-to-one)
在实际的开发中应用不多,因为一对一可以创建成一张表
一对多关系(one-to-many)
介绍
常见实例场景:客户表和订单表,分类表和商品表,部门表和员工表
建表原则
在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键
多对多关联(many-to-many)
介绍
要表示多对多关系,必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。将这两
个表的主键都插入到第三个表中
举例
订单表和产品表是多对多的关系,这种关系是通过与订单明细表建立两个一对多关系来定义的。一个订单可以有多个产品,每个产品可以出现在多个订单中
- 产品表:产品表中的每条记录表示一个产品
- 订单表:订单表中的每条记录表示一个订单
- 订单明细表:每个产品可以与订单表中的多条记录对应,即出现在多个订单中。一个订单可以与产品表中的多条记录对应,即包含多个产品