MySQL

初识MySQL

概述

  • MySQL是一个 开放源代码的关系型数据库管理系统 ,由瑞典MySQL AB(创始人Michael Widenius)公司1995年开发,迅速成为开源数据库的 No.1。
  • 2008被 Sun 收购(10亿美金),2009年Sun被 Oracle 收购。 MariaDB 应运而生。(MySQL 的创造者担心 MySQL 有闭源的风险,因此创建了 MySQL 的分支项目 MariaDB)
  • MySQL6.x 版本之后分为 社区版 和 商业版 。
  • MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  • MySQL是开源的,所以你不需要支付额外的费用。
  • MySQL是可以定制的,采用了 GPL(GNU General Public License) 协议,你可以修改源码来开发自己的MySQL系统。
  • MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持 4GB ,64位系统支持最大的表文件为 8TB 。
  • MySQL使用 标准的SQL数据语言 形式。
  • MySQL可以允许运行于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP和Ruby等等。

关于MySQL 8.0

​ MySQL从5.7版本直接跳跃发布了8.0版本 ,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。

为什么要使用数据库

  • 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
  • 持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。

数据库

按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合;

DB:数据库(Database)

更多操作即存储数据的“仓库”,其本质是一个文件系统。它保存了一系列有组织的数据。

DBMS:数据库管理系统(Database Management System)

是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控 制。用户通过数据库管理系统访问数据库中表内的数据。

数据库与数据库管理系统的关系

数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据。

OLTP

OLTP(online transaction processing)翻译为联机事务处理;主要对数据库增删改查;

OLTP主要用来记录某类业务事件的发生;数据会以增删改的方式在数据库中进行数据的更新处理操作,要求实时性高、稳定性强、确保数据及时更新成功;

OLAP

OLAP(On-Line Analytical Processing)翻译为联机分析处理;主要对数据库查询;

当数据积累到一定的程度,我们需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取我们想要的信息,为公司做决策提供支持,这时候就是在做OLAP了;

SQL

定义

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL是关系数据库系统的标准语言。

关系型数据库包括:MySQL, SQL Server, Oracle, Sybase, postgreSQL 以及 MS Access等;

SQL命令包括:DQL、DML、DDL、DCL以及TCL;

DQL

Data Query Language - 数据查询语言;

select :从一个或者多个表中检索特定的记录;

DML

Data Manipulate Language - 数据操作语言;

insert :插入记录;

update :更新记录;

delete :删除记录;

DDL

Data Define Languge - 数据定义语言;

create :创建一个新的表、表的视图、或者在数据库中的对象;

alter :修改现有的数据库对象,例如修改表的属性或者字段;

drop :删除表、数据库对象或者视图;

DCL

Data Control Language - 数据控制语言;

grant :授予用户权限;

revoke :收回用户权限;

TCL

Transaction Control Language - 事务控制语言;

commit :事务提交;

rollback :事务回滚;

数据库术语

数据库:数据库是一些关联表的集合;

数据表:表是数据的矩阵;

列:一列包含相同类型的数据;

行:或者称为记录是一组相关的数据;

主键:主键是唯一的;一个数据表只能包含一个主键;

外键:外键用来关联两个表,来保证参照完整性;MyISAM存储引擎本身并不支持外键,只起到注释作用;而innodb完整支持外键;

复合键:或称组合键;将多个列作为一个索引键;

索引:用于快速访问数据表的数据;索引是对表中的一列或者多列的值进行排序的一种结构;

MySQL体系结构

MySQL由以下几部分组成:

连接池组件、管理服务和工具组件、SQL接口组件、查询分析器组件、优化器组件、缓冲组件、插件式存储引擎、物理文件

连接者

不同语言的代码程序和mysql的交互(SQL交互);

连接池

管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求;

网络处理流程:主线程接收连接,接收连接交由连接池处理;

主要处理方式:IO多路复用select + 阻塞的io;

需要理解:MySQL命令处理是并发处理的;

主线程负责接收客户端连接,然后为每个客户端 fd 分配一个连接线程,负责处理该客户端的 sql命令处理

管理服务和工具组件

系统管理和控制工具,例如备份恢复、Mysql复制、集群等;

SQL接口

将SQL语句解析生成相应对象;DML,DDL,存储过程,视图,触发器等;

查询解析器

将SQL对象交由解析器验证和解析,并生成语法树;

查询优化器

SQL语句执行前使用查询优化器进行优化;

缓冲组件

是一块内存区域,用来弥补磁盘速度较慢对数据库性能的影响;在数据库进行读取页操作,首先将从磁盘读到的页存放在缓冲池中,下一次再读相同的页时,首先判断该页是否在缓冲池中,若在缓冲池命中,直接读取;否则读取磁盘中的页,说明该页被LRU淘汰了;缓冲池中LRU采用最近最少使用算法来进行管理;

缓冲池缓存的数据类型有:索引页、数据页、以及与存储引擎缓存相关的数据(比如innodb引擎:undo页、插入缓冲、自适应hash索引、innodb相关锁信息、数据字典信息等);

数据库设计三范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

范式一

确保每列保持原子性;数据库表中的所有字段都是不可分解的原子值;

例如:某表中有一个地址字段,如果经常需要访问地址字段中的城市属性,则需要将该字段拆分为多个字段,省份、城市、详细地址等;

范式二

确保表中的每列都和主键相关,而不能只与主键的某一部分相关(组合索引)

订单编号 商品编号 商品名称 数量 单位 价格 客户 所属单位 联系方式
1 1 电脑 1 10000 A dw1 13788888888
1 2 手机 2 6000 A dw1 13788888888
2 3 ipad 3 3000 B dw2 13799999999
订单编号 客户 所属单位 联系方式
1 A dw1 13788888888
2 B dw2 13799999999
订单编号 商品编号 数量
1 1 1
1 2 2
2 3 3
商品编号 商品名称 单位 商品价格
1 电脑 10000
2 手机 6000
3 ipad 3000

范式三

确保每列都和主键直接相关,而不是间接相关;减少数据冗余;

订单编号 订单项目 负责人 业务员 订单数量 客户端编号
1 电脑 A E 10 1
2 手机 C F 20 2
3 ipad D G 30 1
客户端编号 客户名称 所属公司 联系方式
1 H dw1 13766666666
2 B dw2 13799999999

反范式

范式可以避免数据冗余,减少数据库的空间,减小维护数据完整性的麻烦;但是采用数据库范式化设计,可能导致数据库业务涉及的表变多,并且造成更多的联表查询,将导致整个系统的性能降低;因此处于性能考虑,可能需要进行反范式设计;

posted @ 2022-05-24 22:34  DarkH  阅读(106)  评论(0编辑  收藏  举报