MySQL
数据管理
数据管理是由最初的文件管理发展为后续的数据库管理
文件管理
特点:
- 同样的内容出现多次,导致数据冗余较大
- 统一分数据在不同的文件中存放导致修改的时候,不能同时修改导致数据不一致。
- 数据访问空难,读取一个10G的文件,消耗内存较大
- 数据孤立,数据的存储格式不同
- 完整性,数据的转换前后是否完整,账户转账由A转账到B,要么A转账失败,要么A转账成功,B接收到账。不能A转账,B没有接收到。导致数据丢失,必须要保证两个账户的总和是不变的。
- 原子性问题,数据从一个稳定的状态转化为另外一个稳定的状态。转账问题要么转账失败,要么转账成功。
- 并发访问异常,不同的用户打开同一个文件。
- 安全性问题,
文件
表示层(展现的样子)
逻辑层
将物理层存储的数据抽象、表示层用户可见的状态,文件系统(存储引擎)就是控制表示层和物理层的相互关联关系物理层
有元数据
数据存储在数据块上
数据库管理系统
DBMS
关系型数据库
- 表示层:表
- 逻辑层:存储引擎
- 物理层:数据文件
三大模型
层次模型
网状模型
关系模型
简单来讲,关系就是一个表,列表示属性,行表示实体,同一类实体的集合,每一个实体定义的属性是相同的。但是属性对应的值是不同的。例如这个表表示的是学生的集合,有一列表示学校。如果有成千上万的学生都是同一个学校,会导致数据的冗余。可以将该表分成连个表,降低数据的冗余性。
关系模型 :有一个二维表表示数据
E-R 实体-关系模型 :将一张二维表拆分成不同的实体,让不同的实体之间通过不同的约束关系建立外在联系
对象关系模型:把图片存储到数据库中,可以将 文件存放到一个存储文件系统当中,在表中指向该数据。把它当作存储对象来管理。
半结构化数据模型:每一行表示的数据不一样。比如第一行存入的数据是tom,man、10但是第二行存入的数据是 jim,1212(UID),12345@qq.com. 由于每一行的保存的数据的属性不同所以,需要在存储的时候指定每一行存储的属性的名和对应的值。第一行 Username:tom,Sex:man,age:10. 第二行 Username:jim ,UID:1212,email:12345@qq.com.
RDBMS(关系型数据库管理系统)
SQL/MySQL
SQL语言的组成部分:
DML:Data Manapulate Language: 数据操作语言
INSERT, REPLACE, UPDATE, DELETE
DDL:Data Defination Lanuage: 数据定义语言(对RDS对象的操作)
CREATE, ALTER, DROP
完整性定义语言:DDL的一部分
视图定义
事务控制
嵌入式SQL和动态SQL
DCL:Data Control Language: 数据控制语言(控制访问权限)
GRANT, REVOKE
RDB对象 : 库、表、索引、视图、用户、存储过程、存储函数、触发器、事件调度器。
约束 :
域约束(数据类型约束,整型)
外键约束:引用完整性约束,例如表1中有字段是存储引擎,表2中对应的是存储引擎和对应的标号。在表1中的存储引擎使用编号代替真正的存储引擎的名称,表1中的该属性的取值范围需要受到表2中的约束。
主键约束:某一个字段能唯一标识实体。 一张表中只能有一个主键
唯一约束:每一行的莫字段都不允许出现相同值,客户为空。 一张表中可以有多个。
检查性约束:age int 年龄使用整型,不能是负数或者是小数。
数据的存储和查询
存储管理器(包含以下组件)
- 权限以及完整性管理器
- 事务管理器
- 文件管理器:文件内容的增加、修改删除。
- 缓冲区管理器:管理缓存空间。
查询管理器解释用户的查询,将查询语句转化为存储数据所能理解的结构,而且能够将数据抽取出来。或者能够实现数据的存储的工具(包含以下组件)
- DML解释器:了解DML的语句的含义
- DDL解释器
- 查询执行引擎:
单进程多线程
守护线程
应用线程(一个用户分配一下线程,便于用户权限的控制,)
线程重用:用户退出之后保留空闲线程。
关系运算
投影:只输出指定属性
选择:只输出符合条件的行
自然连接:两张表各出一个字段,如果相同,构成的关联关系
笛卡尔积:(a+b)*(c+d)= ac + ad + bc + bd
并:两张表中的并集
使用程序设计语言如何跟RDBMS交互
嵌入式SQL:与动态SQL类似,其语句必须在程序编译时完全确定下来。
- ODBC:C语言的
动态SQL:程序设计语言使用函数(mysql_connect())或者方法与RDBMS服务器建立连接,并进行交互,通过建立连接向SQL服务器发送查询语句,并将结果保存至变量中而进行处理。(JDBC java 程序互联)
MySQL的组成部分
MySQL的组成部分:连接管理器、解析器、缓存、优化器、存储引擎
请求过程:
- 用户请求发送到连接管理器
- 解析器对用户的请求进行分析(词法分析、语法分析),生成解析树。
- 如果解析器完成之后如果查询到以前用户进行过查询并记录到缓存中会交由缓存处理
- 如果缓存中没有结果,会将请求交由优化器,优化查询效率,选择最优查询方式
- 优化之后交由存储引擎。
存储引擎
mysql插件式存储引擎,可以切换存储引擎。
存储引擎 | MyISAM | innoDB |
---|---|---|
特点 | 不支持事务 | 支持事务 |
适用场景 | 查询比较多,修改比较少(数据仓库) | 在线事务处理系统(在线交易) |
MySQL的组成模块
用户请求发送到连接管理器:
连接管理器:侦听器,数据库初始化之后处理被动打开状态,等待客户发送请求
线程管理器:负责跟踪用户线程,确保每个用户都能分配到线程。在用户退出之后,销毁此进程或者是分派给其他的用户使用。(处理客户端请求的模块)
用户模块:验证用户身份
解析器:解析查询并生成解析树
命令分发模块:命令分发,命令的请求是记录日志还是解析,还是查询缓存。
日志模块:记录日志
优化器:查询语句,选择开销最小、性能最好的执行模式。
表修改(定义)模块:表创建、删除、重命名、移除、更新或插入之类的操作。
表维护模块:检查、修改、备份、恢复、优化(碎片整理)及解析
复制模块:
状态报告模块:更新用户的每一次操作
访问控制模块:验证用户是否具有足够的权限进行操作
表管理器:负责修改、创建、读取表结构定义文件;维护表描述符的高速缓存。(表的结构缓存到内存中);管理表锁
表结构定义文件,就是定义表的字段属性,不包含表的内容。
事务、隔离、并发控制、锁
用户和权限
监控(STATUS)
索引类型(查询) VARIABLES
备份和恢复
复制功能
集群