- 文件存储数据的缺点:
- 数据冗余;
- 数据的不一致性;
- 数据访问困难;
- 数据的孤立问题;
- 数据的完整性问题;
- 原子性问题;
- 并发访问异常问题;
- 安全性问题
- 文件的三个层次:
- 表示层:具体的文件,用于实际访问的文件;
- 逻辑层:通过文件系统将文件解构为物理层的数据;
- 物理层:保存元数据,以及真实数据的存储块;
ER
关系模型:
- 实体-关系模型,通常使用来降低数据冗余的一种手段,将大量重复的数据使用某种方式进行示;
- 对象关系模型:基于对象的关系模型
半结构化数据模型:对于结构化的数据,要求数据的每一行都是相同的,但是对于半结构化数据,没有要求是相同的;
SQL:Structure Query Language
:表示结构化查询语言,IBM
的System R
:使用SQL
语言进行交互,对于用户来说,不需要定义任何的数据结构,就可以实现执行的数据语言;DML
:数据操纵语言,增删査改;
INSERT
DELETE
SELECT
UPDATE
DDL
:数据定义语言,RDB
的对象:库,表,索引,视图,用户,存储过程,触发器,事件调度器,创建,删除,修改上面的这些对象;
CREATE
DROP
ALTER
DCL
:数据控制语言,用于定义访问控制权限;
GRANT
REVOKE
- 约束:
- 域约束:数据类型约束
- 外键约束:表示引用完整性约束;
- 主键约束:某个字段能唯一的标识此字段所属的实体,并且不允许为空,主键不能够相同,一个表只能够存在一个主键,候选键:具有主键特征的键,当选定某一个之后,这个就是主键;
- 唯一性约束:每一行的某字段都不允许出现相同值,但是可以为空,一个表可以存在多个唯一键;
- 检查性约束:用于保证数据逻辑的合法性,
Mysql
对于检查性约束很有限;
- 关系型数据库的层次:
- 表示层: 表,也就是
TABLE
; - 逻辑层:存储引擎,用来解释物理层存储的数据文件;
- 物理层:数据文件;
- 表示层: 表,也就是
- 数据的存储和查询过程:
- 存储管理器:
- 权限以及完整性管理器
- 事物管理器:保证用户事务的完整性;
- 文件管理器:管理物理层的多个文件,以及对应关系的管理;
- 缓冲区管理器:用于将数据读入内存,用来管理缓冲空间;
- 查询管理器:负责接收,理解用户的查询请求,并且将查询请求提交给存储管理器;
DML
解释器:用于解释DML
语句;DDL
解释器DCL
解释器- 查询执行引擎
- 存储管理器:
- MySQL为每一个用户连接生成一个线程,
MySQL
是单进程多线程模型,
- 守护类型:用于完成将内存缓冲区里面的数据写入磁盘的过程;
- 应用线程:用于处理用户请求,用户请求触发,处理完毕回收;
- 线程重用
(Thread ruese)
技术 Mysql
对于SMP
对称多处理器的支持不是很完善,MySQL
不支持一条语句在多个CPU
上面执行;- 常见的关系运算
- 投影:只选择某些字段(属性)进行显示的;
- 选择:只输出符合条件的行,
WHERE
; - 自然连接:具有相同名字的所有属性上取值相同的行,
user.shellid=shell.shellid
; - 笛卡尔积:
(a+b)(c+d)=ac+ad+bc+bd
,这种查询影响速率,需要尽量避免这种查询; - 并集:用于合并某些表的某些项目,称为集合运算;
- MySQL服务器的体系结构
- SQL语言的组成部分
DDL
DML
- 完整性定义语言:
DDL
语言的一部分 - 视图定义
- 事物控制语言
- 嵌入式
SQL
和动态SQL
- 授权:
DCL
- 实用程序语言如何和
RDBMS
进行交互
- 嵌入式
SQL
:与动态SQL
类似,但其语言必须在程序编译时完全确定下来; - 动态
SQL
:程序设计语言使用函数(mysql_connect())
或者方法与RDBMS
服务器建立连接,并且进行交互,通过建立连接向SQL
服务器发送查询语句,并且将结果保存在变量中进行处理;
- 嵌入式
MySQL
的组成部分连接管理器:用于接收并且处理用户的请求
- 解析器:用于分析语法或者词法分析,用于将语句生成不同的执行树
- 缓存器:如果存在缓存就是用缓存器里面的内容
- 优化器:完成最优的生成树的语句(逻辑)重写等,用于提高语句重写;
- 存储引擎:用于实现数据物理层和表示层的优化
MySQL
支持插件式存储引擎,不同的存储引擎支持不同的特性,MySQL 5.5.8
支持MyISAM
不支持事物机制,INNODB
支持事物,适合于在线事务处理系统;- 连接管理器细化
- 各个模块的作用:
- 连接管理器:用于侦听来自于
Client
的连接,然后将请求派发给线程管理器; - 线程管理器:用于跟踪用户请求,确保每一个用户都可以得到线程处理请求,并且需要完成线程的自我管理;
- 用户模块:用来验证用户身份,用户的帐号,密码,主机等权限的认证;
- 访问控制模块:用来验证用户的操作是否具有真正的权限来执行这些操作;
- 解析器:用来解析查询,并且生成解析树,解析完成之后,将请求交给特定的模块来完成;
- 命令分发模块:用于判断这个命令是否需要执行,以及是否需要记录日志;
- 优化器:负责创建响应请求的最佳查询策略,用于在执行过程中,优化执行树的逻辑
- 表管理器模块:用于将表的执行请求,转换成对应的文件的,负责创建读取或者修改表定义文件;表的字段名称;
- 对于表结构是需要特殊的文件来进行保存的,表结构定义文件用于保存每一张表的结构;
- 维护表描述符高速缓存(用于将表的结构信息缓存在内存中);
- 表锁:对表施加锁等操作;
- 表修改模块:表创建,删除,重命名,移除,更新或者插入之类的操作;
表维护模块:检查,修改,备份,恢复,优化(碎片整理)以及解析;
数据在磁盘上面的存储:
- 数据在磁盘块的基础上面引入数据块的概念,数据块是存储引擎进行管理的,定长行管理简单 ,但是会导致资源的浪费,变长行需要维护块头信息,用来描述变长行的使用情况,提高数据块的利用率,定长的查询效率会比较高;
- 文件中记录组织;
- 堆文件组织:一条记录可以放在文件中的任何位置;
- 顺序文件组织:根据搜索码值(某个字段)顺序排序进行存放,通过引入指针的思想,保存下一条记录的指针值,在数据进行存储的时候,通过修改指针的值,来完成数据逻辑上面的顺序存储
- 散列文件组织:通过散列运算,将散列的结果放在某一个范围的文件里面,用于加速查找过程,散列函数需要尽最大可能的使数据均匀的分布在各个桶里面;
- 通常情况下,张表存储为一个单独的文件,但是对于某些存储引擎,将多个表存储在一个文件当中;
- 表结构定义文件:
- 表数据文件:
- 表空间是用于实现将多个表的数据组织在一个数据文件中的一个逻辑管理组件;
- 数据字典;
Data Directionary
:表示各种数据的元数据,通常包括:关系的名字,字段名称,字段的域,字段的类型和长度,视图,完整性约束,用户,授权,密码;
缓冲区管理器:缓冲区管理器需要提供缓存置换策略,来解决缓存中遇到的问题,内存空间过于小,降低置换率等问题,以及某些块是不能够被置换出去的;
MySQL
Mysql
:高性能,查询性能可以和Oracla
一较高下,稳定性,伸缩能力,完全的多用户支持,支持众多的开发语言,并且是开源软件;
- 历史版本:
4.0
:支持联合查询;4.1
:支持子查询[嵌套查询],预备语句,引入B_tree
索引和R_tree
索引5.0
:支持存储过程,支持游标,视图,触发器,分布式事务;5.1
:支持数据分区,基于行的复制功能,支持插件式存储引擎的抽象层,事件调度器;5.5
:在性能上面有了很大的性能改进;5.6
:引入多线程复制等功能;
MySQL
的产品家族:
MySQL Server
:包含mysql
以及mysqld
;MySQL Cluster
:集群套件,至少需要四个节点,组合成一个基本的集群,4个9的可用性,可以在内存中处理数据,性能优异,但是比较少使用;MySQL Proxy
:代理服务器,可以实现MySQL的语句路由功能,用于实现读写分离,对于应用层代理,可以分析并且重写用户的请求报文,但是没有进行完整的使测试;MySQL Adminitrator
::MySQL
的管理工具,可视化GUI
管理工具;MySQL Query Browser
:查询浏览器;MySQL WorkBench
:数据库设计工具;MySQL Migration Tookit
:用于实现数据库之间的移植操作,用于在不同的版本和平台之移植数据;MySQL Embedded Server
:嵌入式环境专用的;MySQL Drivers and Connector
:专用的驱动和连接器;
mysql
分为社区版本以及企业版本,一般来说使用社区版本可以满足实际中的生产需要;MariaDB
:Percona
:MySQL
的性能改进优化的文章,建议关注;- MySQL的安装
- 专用的软件包安装进行安装
- 通用二进制格式,某个通用平台上面进行安装
gcc icc
; - 源代码软件包:
5.5
之后使用cmkae
(CrossPlarform
跨平台的意思,不是C
语言的意思);- 下载安装社区版本;
GA
:General Avaliability
;RC
:Release Candidate
;beta
:公测版本;appha
:内测版本;
- MySQL提供的数据包
MySQL-client
:Client
工具用于提供命令行工具以及各种组件;MySQL-debuginfo
:用于调试追踪代码执行,高级DBA可能会是使用;MySQL-Devel
:表示开发用的头文件和库文件;MySQL-embedded
:嵌入式Server
;MySQL-server
:表示服务器端MySQL-shared
:表示MySQL
共享库;MySQL-shared-compat
:用于兼容老版本提供的兼容库;MySQL-test
:测试组件;MySQL-VERSION-PALTFORM.src.rpm
:源码格式的软件包;- MySQL安装后生成的文件
bin
:MySQL
的各种二进制程序,包括服务器端以及Client
端;data
:数据和索引文件目录;include
:表示头文件;lib
:库文件;man
:帮助手册;mysql-test
:测试组件;scripts
:表示初始化脚本;shared
:将各种不同的错误信息本地化;sql-bench
:表示基准性能测试;support-files
:表示主配置文件的脚本,以及配置文件的样例;- 初始化配置
- 配置文件的读取顺序:
/etc/my.cnf --> /etc/mysql/my.cnf --> MySQL-HOME/my.cnf --> /path/to/file when defaults-extra-file=/path/to/file is specified --> ~/.my.cnf
;- 每一个工作在不同端口上面的
mysql
服务称为一个MySQL
实例; - 在检查得到某一个位置得到配置文件之后,仍然会检查后面的配置文件的,如果配置文件在多个位置都找到,最终的结果是这些配置文件合并起来的结果,如果这些配置文件里面的内容是冲突的,那么冲突或者是重复的内容以最后一次读取的为准;
MySQL
安装完成以后生成5
个用户,三个root
用户:root@localhost [email protected] root@hostname
以及两个匿名用户' '@localhost ' '@hostname
;MySQL
更改用户密码的方式:- 1.
# mysqladmin -u root password 'new-password' -p
; - 2.
# mysqladmin -u root -h this_host_name password 'new-password'
; - 3.
mysql> SET PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('new_pass')
; - 4.
mysql> UPDATE mysql.user SET PASSOWRD=PASSWORD('new_pass') WHERE 'CONDITION'
; mysql> FLUSH PRIVILREAGS;
MySQL基础知识之一
猜你喜欢
转载自blog.csdn.net/qq_36294875/article/details/80200688
今日推荐
周排行