MySQL 理论篇之基础知识


1、数据保存在文件当中可能会出现的问题

    ①数据冗余:很多内容都是重复的,就像是/etc/passwd中最后一列/bin/bash

    ②不一致性:数据存储多份时,修改的话每一份都要手动修改,很麻烦

    ③数据访问困难:当保存数据的文本过大时,载入内存再访问很困难

    ④数据孤立:数据分散在不同文件中,每个数据保存时没有统一规范,检索很困难

    ⑤完整性问题:以银行转账的问题,要保证转账前跟转账后的结果是一致的

    ⑥原子性问题:同银行转账问题,数据必须以一种稳定状态转换为另一种稳定状态

    ⑦并发访问异常:多个人访问同一个数据文件

    ⑧安全性问题:例如文件查看与访问授权等等


2、关系模型(结构化数据模型)

    ①关系模型

    实体-关系模型(E-R模型)

    对象关系模型:基于对象的数据模型

    半结构化数据模型:XML(扩展标记语言)


3、关系:关系代数运算

    ①交集:A 交 B

    ②并集:A 并 B

    ③差集:属于A不属于B;属于B不属于A

    ④全集:总的集合

    ⑤补集:全集 - A 

    

4、SQL(Structure Query Language)语言基本分类

DML(Data Manipulation Language):数据操纵语言例如:INSERT DELETE SELECT UPDATE

DCL(Data Control Language):数据控制语言例如:GRANT REVOKE

DDL(Data Definition Language):数据定义语言例如:CREATE ALTER DROP

5、约束类型

域约束:数据类型约束

外键约束:引用完整性约束

主键约束:某字段或某些字段组合能唯一标识此字段所属的实体,并且不允许为空;所有能唯一标识
的都叫候选键,选定之后就成了主键

唯一键约束:每一行的某字段都不允许出现相同指,可以为空;一张表只能有一个主键,但可以有多个唯一键

检查性约束:对域约束进一步的检查,避免发生现实逻辑错误

6、关系型数据库视角及文件系统视角

关系型数据库视角                        文件系统视角

表示层:表                              表示层:文件

逻辑层:存储引擎                        逻辑层:文件系统

物理层:数据文件                        物理层:磁盘块

7、关系型数据库管理系统具备的两个核心组件

存储管理器

            权限及完整性管理器                      
            
            事务管理器
            
            文件管理器
            
            缓冲区管理器

查询管理器

            DML解释器            
            
            DDL解释器
            
            查询执行引擎

8、mysql是使用一个独立线程响应一个请求的,避免权限交叉及安全问题

单进程多线程模型线程重用提高效率

SMP(Symmetric Multi-Processing)对称多处理 能力较弱,一个单独的查询语句只能在一颗CPU上执行

9、关系运算

            投影:只输出指定字段或属性            
            
            选择:只输出符合条件的行
            
            自然连接:具有相同名字的属性上所有取值相同的行
            
            笛卡尔积:(a+b)*(c+d)=ac+ad+bc+bd
            
            并:集合运算

10、MySQL微观组织结构各组件的功能


wKioL1Z6oA-h53PIAALM5dH7KrM438.jpg


连接管理器:用于侦听来自客户端的连接,然后将请求派发给线程管理器

线程管理器:跟踪用户线程,确保每一个用户都能分配到线程,并且在用户退出后要么能实现线程重用,要么销毁此进程

用户模块:验证用户身份,判断用户是否有访问服务器权限

命令分发器:用户具有访问服务器权限之后,用户所发起的请求依据其类型将其转交给特定的模块

缓存模块:高速缓存模块,如果用户的请求是查询请求,缓存中有就直接返回

日志模块:负责记录用户操作的各种日志

解析器:解析查询并生成解析树,然后将生产的解析树交给特定的模块

优化器:负责创建响应请求时候的最佳查询策略,服务器的性能一定的程度上取决于优化器

表定义模块:DDL或DML之类的操作交由表定义模块,如表创建、删除、重命名、移除、更新或插入之类的操作

表维护模块:检查、修改、备份、恢复、优化(碎片整理)及解析

复制模块:例如把主MySQl服务器上的数据同步至从MySQL服务器上就需要用到复制模块

状态报告模块:存储当前MySQL服务器每一个执行过程中的状态信息

访问控制模块:验证客户端用户是否有权限执行其请求的操作

表管理器:负责创建、读取或修改表定义文件;维护表描述符高速缓存;管理表锁

存储引擎:真正与磁盘上数据交互的接口

11、文件中记录组织

    ①堆文件组织:一条记录可以放在文件中的任何地方

    ②顺序文件组织:根据"搜索码"指顺序存放

散列文件组织:散列索引函数组织存放


12、表空间

将多个表的数据组织在一个数据文件当中的另外一个逻辑管理组件,有点类似于逻辑卷


13、数据字典

其实就是关系的元数据;例如关系的名字、字段名称、字段类型及长度、视图、约束关系、用户名称、授权、密码等等

安装MySQL后会进行初始化,生产一个mysql名称的库,这个其实就是MySQL的数据字典


14、存储引擎,也被称为表类型

MyISAM表: 无事务,表锁

.frm: 表结构定义文件

.MYD: 表数据

.MYI: 索引


InnoDB表:事务,行锁

.frm: 表结构

.ibd: 表空间(数据和索引)


15、使用程序设计语言如何跟RDBMS交互

动态SQL:程序设计语言使用函数或者方法与RDBMS服务器建立连接,并进行交互;通过建立连接向SQL服务器发送查询语句,并将结果保存至变量中而后进行处理;

嵌入式SQL:与动态SQL类似,但其语言必须程序编译时完全确定下来;


16、定义数据类型的意义

存入的值类型;

占据的存储空间;

定长还变长;

如何比较及排序;

是否能够索引;


17、存储过程使用Call调用,存储函数使用SELECT


18、SQL模型

ANSI QUOTES:此种模式下,双引号("")和反引号(``)意思相同,想要引用字符串只能使用单引号('')

IGNORE_SPACE:此种模式下,内建函数中忽略多余的空白字符

STRICT_ALL_TABLES:此种模式下,所有非法的输入都不允许,例如CHAR(3),插入5个字符就会报错,不允许插入

STRICT_TRANS_TABLES:如果一个值不能插入到一个支持事务表(如Innodb)中,则中断当前的操作,不影响非事务表

TRADITIONAL:传统模式



19、MySQL服务器变量

全局变量:对当前会话无效,只对新建立会话有效

显示

mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';

mysql> SELECT @@GLOBAL.sql_mode;

设定

mysql> SET GLOBAL sql_mode='STRICT_ALL_TABLES';


会话变量:即时生效,但只对当前会话有效

显示

mysql> SHOW [SESSION] VARIABLES LIKE 'sql_mode';

mysql> SELECT @@SESSION.sql_mode;

设定

mysql> SET [SESSION] sql_mode='STRICT_ALL_TABLES';



20、锁

(1)、锁类型划分

读锁:共享锁;别的线程能读,但不能写

写锁:独占锁(排他锁);别的线程即不能读,也不能写


(2)、锁粒度划分

从大到小,MySQL服务器仅支持表级别锁,行锁需由存储引擎完成

表锁:表级别锁

页锁:数据块级别锁

行锁:行级别锁


21、MySQL配置文件读取顺序

/etc/my.cnf --> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf --> --default-extra-file=/path/to/somefile --> ~/.my.cnf


22、MySQL体系结构图


wKioL1Z_oFjAnxLVAAGO9AGdEAg103.png









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章