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微观组织结构各组件的功能


mysql 设计表的时候如何考虑冗余字段 mysql数据冗余导致的问题_人工智能




连接管理器:用于侦听来自客户端的连接,然后将请求派发给线程管理器 线程管理器:跟踪用户线程,确保每一个用户都能分配到线程,并且在用户退出后要么能实现线程重用,要么销毁此进程 用户模块:验证用户身份,判断用户是否有访问服务器权限 命令分发器:用户具有访问服务器权限之后,用户所发起的请求依据其类型将其转交给特定的模块 缓存模块:高速缓存模块,如果用户的请求是查询请求,缓存中有就直接返回 日志模块:负责记录用户操作的各种日志 解析器:解析查询并生成解析树,然后将生产的解析树交给特定的模块 优化器:负责创建响应请求时候的最佳查询策略,服务器的性能一定的程度上取决于优化器 表定义模块: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体系结构图


mysql 设计表的时候如何考虑冗余字段 mysql数据冗余导致的问题_数据库_02










转载于:https://blog.51cto.com/soysauce93/1726867