1、关系模型和关系型数据库之间的联系
关系模型:也叫结构化数据模型
关系模型分类:
(1)关系模型:最基本的
(2)关系-实体模型:将数据拆分为多个不同实体(数据表),通过实体之间建立关联关系,也叫E-R模型
(3)对象关系模型:基于对象的数据模型(比如图片)
(4)半结构化数据模型:比如XML(扩展标记语言),存储数据的同时也存储数据的属性
关系型数据库能够处理以上的4种关系型数据模型
2、SQL语句分类
(1)DML:数据操作语言(增删改查)
insert
delete
update
select
(2)DDL:数据定义语言(针对操作对象)
create
drop
alter
(3)DCL:数据控制语言(针对访问权限)
grant
revoke
关系型数据库的对象有:
库、表、索引、视图、用户、约束、存储过程、存储函数、触发器、事件调度器(类似于cron)
3、约束分类
(1)域约束:数据类型约束
(2)外键约束:引用完整性约束(使本表与另外的表关联起来的字段)
(3)主键约束:某字段能唯一标识此字段所属的实体,并且不能为空(唯一标识本表)
(4)唯一约束:跟主键约束类似,但是唯一约束可以为空,主键约束不能为空,而且一张表可以有多个唯一约束,但是只能有一个主键约束
(5)检查性约束:除了用域约束来规定数据的类型之外,检查性约束可以规定数据不违反常理(比如规定一个人的年龄不超过150岁)
4、关系型数据分层
表示层:表
逻辑层:存储引擎
物理层:数据文件
5、关键组件
(1)查询管理器
DDL解释器、DML解释器、查询执行引擎
(2)存储管理器
缓冲区管理器、文件管理器、事务管理器、权限和完整性管理器
备注:
因为对数据操作都是需要把数据从磁盘中读到内存,而内存往往比硬盘小得多,因此需要缓冲区管理器提供一种缓冲置换策略,将不常用的或者是已过期很久的一些操作置换出去,以此来腾出内存空间
6、进程与线程
mysql是属于单进程多线程。
线程分为守护线程和用户线程两种。
守护线程:mysql内部的线程
用户线程:比如连进来的用户(每一个用户连进来都建立一个线程,一个线程不能同时为多个用户服务,因为这涉及到权限交叉的问题)
备注:
在32位系统中,mysql只能使用到2.7G的内存(因此在生产环境中应该上64位的系统)
7、mysql与Oracle的区别
最大的区别在于mysql支持插件式的存储引擎(也就是用户可以自行选择使用哪个存储引擎)
备注:
5.5.8之前,mysql默认的存储引擎是myisam,myisam不支持事务(myisam适用于查询比较多而修改比较少的场景,特别适用于数据仓库);
5.5.8之后,也就是mysql被Oracle收购之后,mysql的默认存储引擎变为innodeDB(innodeDB适用于在线事务管理系统,比如在线论坛等等)
8、SQL语句执行过程
连接管理器
–>线程管理器
–>用户模块(验证身份)
–>命令分发模块
–>解析器
–>优化器(select)、表定义模块(update、delete、insert)、表维护模块(repair,检查、修改、备份、修复、优化等)、复制模块、状态报告模块
–>访问控制模块(检查用户是否有权限操作相关数据表)
–>表管理器(完成SQL操作,负责创建、读取或修改表结构定义文件,维护表描述符高速缓存,管理表锁)
–>存储引擎(数据库跟磁盘上的数据打交道的接口)
9、定长和变长
对于定长的数据来说,查询的效率高,但是很容易造成空间浪费;
对于变长的数据来说,查询效率慢,但是可以节省存储空间
备注:
在选择使用定长还是变长的时候,应该选择折中的方案
10、数据字典
定义:存储元数据的表(在mysql初始化的时候,默认会生成一个叫做mysql的数据表,这个数据表就是用来存储数据库的相关元数据的,也就是数据字典)