开发者学堂课程【Linux MySQL 服务器搭建与应用:数据库原理深度讲解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/578/detail/7985
数据库原理深度讲解
内容介绍
一、学习框架
二、数据的时代
三、数据库的发展史
四、文件管理系统
五、数据库管理系统
六、关系型数据库
一、学习框架
在工作中,MYSQL 数据库可以说是排在第一级别的,用的最广泛的,是一个非常主流的应用系统,目前是互联网和传统公司在逐渐大规模使用的数据库,因此大家需要重视本章学习内容。
本章学习的框架及介绍如下:
u 关系型数据库基础:首先了解数据库的发展历程,尤其关注数据库的特性,比如数的概念,范式的概念,这些有助于帮助我们更好的理解数据库
u 安装 MySQL: 安装 MYSQL 数据库有多种方法,如编译安装、二进制安装
u 管理数据库和表:如何管理数据库里的各种内容,如对数据库的内容增删改查,创建数据库、添加表、修改表、查询表,这些内容是我们日常经常用的操作指令
u 用户和权限管理:对数据库来讲,为了安全,通常要设置相应的权限用户
u 函数和存储过程:MYSQL 数据库用的是自己的语言即 SQL 语言,也支持函数和存储过程,还支持触发器等等
u MySQL 架构:为了更好的管理数据库,我们需要了解 MYSQL 的架构
u 存储引擎:与传统数据库不同的地方在于 MYSQL 数据库是多引擎的数据库,而其他的数据库只有一种引擎没有其他选择,我们会介绍存储引擎的特点及该如何选择
u 服务器选项,系统和状态变量:在查询和管理数据库的各种信息时,必不可少的需要用到变量,通过查看这些变量和设置这些变量,可以影响服务器的工作特性。作为数据库来说,性能是运维工程师要知道如何优化的手段。
u 优化查询和索引管理:利用索引可以一定程度上的改善 MYSQL 数据库的性能
u 锁和事务管理:MYSQL 数据库也支持事务,锁是怎么回事,有几种锁,事务管理是有哪些特性和具体细节本章也会进行介绍
u 日志管理:MYSQL 数据库和传统的文件系统一样有日志功能,利用日志可以还原系统到某个状态,甚至还可以指定还原到某个具体的时间点。
u 备份还原 :备份还原对数据库相当重要
u MySQL 集群:前面我们学到 DS 主从复制,MYSQL 也有类似的思想,但更为复杂。
二、数据的时代
1. 涉及的数据量大
2. 数据不随程序的结束而消失
3. 数据被多个应用程序共享
4. 大数据
当前是一个数据的时代,我们身边时时刻刻会产生大量的数据,我们希望能充分的利用这些数据,来进行充分挖掘和分析,产生一些商业价值。因此越来越多的大公司开始重视数据管理。
早些年,很多公司对日志可以说是持有一种不屑一顾的态度,对于运维工程师来说,日志删了怕出事,不删又很占内存。如今,日志可以用来交易,从中可以分析出很有价值的内容
三、数据库的发展史
1. 萌芽阶段:文件系统——使用磁盘文件来存储数据
事实上目前文件方式仍然有人在用,所谓数据库简单的说就是数据的集合,所以只要能把数据存起来就都叫数据库,即使是文本文件、word、笔记等文档都算数据库,是一个广义上的概念。
早期就是拿普通的文件和磁盘来存放文件,后期才出现了专业的数据库产品。文件来存放数据的解决方案并不是很专业,例如纯文本格式相对来说比较简单,但是如果是复杂的内容如二进制或者不可见的字符如音视频,文本文件就不是很方便了,于是逐渐产生了一些专业的数据库,如网状模型、层次模型的数据库。
2. 初级阶段:第一代数据库——出现了网状模型、层次模型的数据库
网状型就是将数据以网状拓扑的结构存放,比如马哥作为作者写了一本书,同时又有多个其他作者如zhangsir和马哥合著了这本书,而zhangsir和马哥可能自己也在写其他书,这就构成了网状拓扑结构,可以显示出相互之间的关系,但如果数据过多很复杂,管理起来就不太方便了。
层次模型举例:
假设现在马哥教育有两种课,linux 和 python,linux 下有好几个班,班级人数分别为28,30,31,每一期都有自己的学员信息、讲师信息;python 课程同理。但有个问题是,如何马哥既带 linux 又带 python 班,在讲师信息部分马哥的信息就会重复。
3.中级阶段:第二代数据库——关系型数据库和结构化查询语言
现在比较流行的是关系型数据库,用的是sql语言,用类似excel表的形式存放数据,就是横纵列的二维表,比如存放课堂上各位学生的信息。
4.高级阶段:新一代数据库——关系-对象”型数据库
现在很多新型的数据库宣称自己是面向对象的数据库,实际本质上还是关系型数据库,只是在其中添加了一些面向对象的元素。
四、文件管理系统
(1)文件管理系统的优点
用文件系统来存放数据,优点是比较省事,通过一个文件就能存储数据。
(2)文件管理系统的缺点
① 编写应用程序不方便
文件管理系统的缺点也很明显,在读取其中的数据时需要大量的工作,尤其是是使用一些文本处理工具时,对文本文件的格式要求就会比较高,需要利用分号、冒号、空格等将文本隔开。
另一方面,仅仅格式规范还不足够,我们还需要掌握文件的哪些部分是放的什么东西(这个时候 kennel 就需要通过循环语句、if 语句等),还要考虑文件数据输出的格式,让其按照我们希望的格式来显示,因此访问数据库的时候很大的精力上都在花在研究文件格式、文件位置和数据输出形式上了,而不是我们真正关注的数据上,这样无形之中就是舍本逐末了。
②数据冗余不可避免
③应用程序依赖性
④不支持对文件的并发访问
用 c 语言打开一个文件时,通常我们要调用 open 函数,但当这个文件被打开时别人就不能打开,只有文件被 close 了别人才能访问,不能做到并发访问
⑤数据间联系弱
⑥难以按用户视图表示数据
⑦无安全控制功能
文件系统的这种方式来存放数据,显而易见是很不专业的,只能解决一些较简单的问题,对于存放大规模的数据这个显然是不适合的,而专门的数据库管理系统DBMS 就可以解决前面的问题。
五、数据库管理系统
(1)数据库管理系统(DBMS)的优点
l 相互关联的数据的集合
l 较少的数据冗余:MYSQL、Oracle 实际上都是专业的 DBMS 数据库的管理系统,office 中的 access 也算是一个 DBMS,都是具有专门的特定的数据管理功能的,这些数据库有较少的数据冗余
l 程序与数据相互独立:相互之间有一定关联的数据经整合后放到一个数据库里,没有关联的分开存放在不同的数据库里,数据和程序是相独立的。如 access 数据库,数据可以存放在 access 文件中,但要把这个文件打开就需要下载 office 里的excel,MYSQL 数据库准确说是一个程序,通过 MAC 数据库来进行管理,进行组织这样的一个关系,两个之间也是独立的。
l 保证数据的安全、可靠:利用DBMS能够实现数据的安全性和可靠性,可以在数据库上加权限,做到有些数据能访问,有些数据根据自己的需求不让你访问,有些数据能读,有些数据能读能改,这都是可以做到。
l 最大限度地保证数据的正确性:数据库大部分都有日志功能,所以即使在磁盘工作的时候突然停电了,数据可能不完整了,丢了一部分东西,但是由于数据库管理系统都有日志功能,它至少让系统能够还原到一个一致性的状态,能够正常启动,能够把数据库能还原,而对于一般的文件来说,如果这个文件正在编辑,如果突然断电,当机器重启以后这个文件可能就破坏了,无法恢复了,原始数据就会破坏,所以相对来讲数据库管理系统就更加可靠,而且它也能够保证数据的正确性。
l 数据可以并发使用并能同时保证一致性
(2)数据库管理系统
l 数据库是数据的汇集,它以一定的组织形式存于存储介质上:所谓数据简单说就是数据的汇集,当目前来讲数据库一般是放在磁盘上的,但是有的时候数据库也可以放在内存中,但存在内存中会涉及一个问题,即停电时数据会丢失。
l DBMS是管理数据库的系统软件,它实现数据库系统的各种功能,是数据库系统的核心:
l DBA(数据库管理员):负责数据库的规划、设计、协调、维护和管理等工作
l 应用程序指以数据库为基础的应用程序:平时访问数据库的时候,我们并不需要自己装一个专门的数据库软件来访问,都是通过人家开发好的一个程序来访问的,如京东、淘宝等。
(3)数据库管理系统的基本功能
数据库管理系统有4个基本核心功能,
数据定义:所谓数据定义,就是在一个数据库里将来想存数据,应该如何来定义这些数据。
比如要规划一个数据库,这个数据库里将要存什么内容,里面有几张表组合成,每个表里面有几个列组合成,每个列里面到底是什么数据类型的。这些都要定义好的,将来往里放数据的时候就要必须符合预先定义的类型,这样的话也有效的避免了随便往里插入一些无效数据
l 数据处理:数据搭建起来后,可能需要对数据进行增删改查,对数据做增加修改删除查询,尤其查询做得非常多。
l 数据安全:需要对数据加一些权限控制
l 数据备份:对于运维工程师来说备份必须要特别熟练
作为运维工程师来讲,管理数据库虽然不一定特别专业,但至少常见的功能是需要掌握的,要知道如何来规划一个数据库,如何来从头到尾设计一个数据库,中间的维护管理,包括备份还原,这都是必须要掌握的,以及简单的性能优化,做到一些常见的功能必须要掌握,当然要真正作为一个专业级的 DB,可能要再花更长的时间来研究,才能做到真正的专业。
(4)数据库系统的架构
l 单机架构:所谓单机架构简单的说就是我的数据库是存放在单一的一个主机上,访问的时候也是在这台电脑上访问,显而易见这种方式访问,只适合单个人使用,例如有些财务软件就是基于
机架构的,它背后用的数据库就是 office 里的 access 数据库,或者是 Seeker,server 里面的一些单机版的数据库软件。
大型主机/终端架构:如 multics,unix,这种架构就是一个主机带好多终端,通过一个线缆连接到大型主机上来操作上面的数据。
主从式架构(C/S):主从架构是目前主流的架构,专门有一个服务器数据库,要访问专门客户端来进行访问。MYSQL,还有非常著名的数据库 oracle,包括微软的SQL server,这些都是基于主从式的架构的应用,非常普遍。
但是这种数据库有一个巨大的缺点,因为只有主一个服务器来支持并发很多客户端的访问,这时候往往服务器这边有可能会带来一个系统的瓶颈,比方说有几百个用户通过自己的客户端软件连接这个服务器,这个服务器的性能有可能会受到比较大的影响,没有办法及时的进行响应,瓶颈比较严重。
分布式架构:分布式架构实际上就是 DNS,它可以把数据库零零散散的分布在了很多 DNS】服务器上,每个机器只放一部分,这样在访问的时候每个 DN服务器只提供一部分的用户访问,显而易见的可以提高性能。
六、关系型数据库
(1)概念介绍
u 关系:关系就是二维表,并满足如下性质:表中的行、列次序并不重要
u 行 row: 表中的每一行,又称为一条记录(record)
u 列 column: 表中的每一列,称为属性,字段(field)
u 主键(Primarykey):用于唯一确定一个记录的字段,可以避免出现一样的记录。
所谓主键它是一个属性,这个属性是关联在表中的某个列上的,比如当把主键作用在字段上,这是个 PK 组件,primary key 一旦作用以后,将来在里面存放信息的时候,就不会再产生重复的信息了。
如果没有主键的话,出现相同的信息往往会造成数据的冗余和空间的浪费。一般为了数据库的规范,通常都要加主键,这是一个习惯,避免出现一样的记录。
域 domain:属性的取值范围,如,性别只能是 '男’ 和 '女‘ 两个值
不是所有数据库都是关系型数据库,还有非关系型数据库 NO SQL(Not Only SQL),例如 memcached、redis、mongodb,但目前最流行的是关系型数据库。
关系型数据库在存放数据的时候有更小的冗余,而且相对来讲存放数据的方式也更加严谨,保证数据的稳定性一致性安全性,所以关系型数据库存放数据比较稳妥,不容易出问题,但缺点就是性能比较差。MYSQL 正好相反,它比较存放数据比较灵活,但是也带来的缺点就是安全性和稳定性可能都不如关系数据库这么严
(2)主流关系数据库
RDBMS:
MySQLMySQL, MariaDB, Percona Server
PostgreSQL
简称为 pgsql,EnterpriseDB
Oracle:
MSSQL:
DB2:
事务 transaction:多个操作被当作一个整体对待。
什么叫整体?就是说假设有5个操作,当对这个数据库做这5个操作的时候,如果它在1个事务里面,它必须作为一个整体出现,必须要么把这5个动作都做了,要么就都不做,不能只做一部分。
l 事务的四个特性 ACID——
A:原子性 原子性说的就是不可分割的意思。
C:一致性 一致性说的是数据库在操作的时候,时时刻刻要保证数据是处于一致性状态。比如有两个银行的账户,现在一个账户想给另外一个账户汇款1万块钱,这时候理论上应该这1万块钱从这个账户上把1万钱扣掉,然后在另一个账户上给增长1万块钱,这就交一致性,要保证数据时时刻刻总的账不能变。
I:隔离性 隔离性说的是两个事务之间操作,相互隔离互不影响
D:持久性 持久性那就是持久影响,当把数字110变成119,如果事务整个结束了,那么这个数字就会永久的在数据库里,保存为119,这个数据是永久性生效的
(3)实体-联系模型E-R
u 实体 Entity
• 客观存在并可以相互区分的客观事物或抽象事件称为实体。
• 在E-R图中用矩形框表示实体,把实体名写在框内
u 属性
• 实体所具有的特征或性质联系
u 联系
u 联系是数据之间的关联集合,是客观存在的应用语义链
• 实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间有一种关联关系
• 实体之间的联系:指不同实体之间联系。例学生选课实体和学生基本信息实体之间
• 实体之间的联系用菱形框表示