数据库进阶(以Mysql为例)
(该部分不包含数据库的基本操作)
mysql编码
1、查看mysql编码
在命令窗口登录mysql后输入一下命令查看
show variables like ‘character%’;
2、设置mysql编码
在我们之前的解压包中,my-default.ini 就是我们默认的配置文件,mysql在启动会自动去mysql应用程序的文件中查找my.ini的配置文件(自行创建)
(配置如下)
[mysqld]
character‐set‐server=utf8
collation‐server=utf8_general_ci sql_mode=‘NO_ENGINE_SUBSTITUTION’
[mysql]
default‐character‐set = utf8
[mysql.server]
default‐character‐set = utf8
[mysqld_safe]
default‐character‐set = utf8
[client]
default‐character‐set = utf8
(配置后重启mysql即可)
数据库原理
常用术语:
数据模型
数据模型(Data model)是数据库结构的基础,是用来描述数据的一组概念和定 义,数据模型主要有三个要素:数据结构、数据操作、数据约束条件。
数据结构:对象类型的集合,是对静态属性的描述。
数据操作:是对数据库中的各种对象性数据,允许执行的操作的集合,如增删改查等; 数据操作是对系统动态热性的描述。
数据的约束条件:是一组完整性规则的集合,也就是说,对于具体的应用必须先遵循特 定的语义约束条件。比如:性别只能取 “男”或者“女”中的之一。考试成绩:(满分100) 只能是0-100的数值。
数据库
数据库(database)是长期存储在计算机外存上有结构,可共享的数据集合;数据 库中的数据按照一定的数据模型描述、组织和存储,具有较小的冗余度,较高的数据独 立性和可扩展性,并可以为多个用户共享。
常见数据库分类:
关系型数据库:如:MySQL,oracle,sqlserver
非关系型数据库:如:redis,hbase
数据库管理系统
数据库管理系统(database managerment system, DBMS)是指数据库系统中对 数据库进行管理的软件系统,是数据库系统的核心组成部分。数据库的一切操作,如增 删改查以及各种控制,都是通过DBMS进行的。
具有以下4个基本的功能:
1、数据定义功能
用户可以通过DBMS提供的数据定义语言对数据库的数据进行定义。
2、数据操纵功能
用户可以通过数据操纵语言实现对数据库的增删改查操作
3、数据库运行管理 管理数据库的运行是DBMS运行时的核心工作。所有访问数据库的操作都要在DBMS的统 一管理下进行,以保证数据的安全性、完整性、一致性以及多用户对数据库的并发使 用。
4、数据库的建立和维护
建立数据库,包括数据库初始数据的输入与数据转换等。维护数据库,包括数据库的转 储与恢复,数据库的重组织,性能监控和分析。
数据库相关人员
数据库系统的相关人员是数据库系统的重要组成部分,具体可以分为以下的三类人员
1、数据库管理员
职责:负责数据库的建立、使用、维护的专门人员
2、应用程序开发人员
职责:开发数据库应用程序的人员,可以使用数据库管理系统的所有功能。
3、最终用户
职责:一般来说,是通过应用程序使用数据库的人员,最终用户无需自己编写应用程 序。
数据库系统
数据库系统(database system DBS)是由硬件系统,数据库管理系统,数据库, 数据库应用程序,数据库系统相关人员构成的人-机系统,是指有数据库的整个计算机系统。
说明:在许多场合下,数据库,数据库管理系统,数据库系统不做严格区分
数据库设计
需求分析
明确用户需求,到底做什么?
概念模式设计
(1) 该阶段是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象。主要 是通过E-R图表示。
(2) 优点:
A、简单明了,容易理解
B、独立于计算机与具体的RDBMS无关。
(3) E-R模型的基本元素
A、实体(Entity) 如:学生
B、属性(attribute)如:姓名
C、键码(key)如:身份证号码;
D、关系(relationship)如:两个实体之间的关系
a) 一对一(1:1): 一个人一个身份证号码;一个学校一个校长
b) 一对多(1:n):学校和老师的关系
c) 多对多(n:n):学生选课,一个学生可以选择多门课程,一门课程课被多名学 生进行选修。
(下图为ER图示例)
逻辑模式设计
(1) 该阶段会涉及到更多的概念,方法,理论。
(2) 主要任务:
A、与具体的数据库相关
B、规范化处理,尽可能的消除关系操作过程中的异常情况。
C、E-R图转换为如下的关系模式
电影(片名,出品年份,影片长度,影片类型,公司名称)
明星(姓名,联系地址,公司名称)
扮演(片名,出品年份,姓名,角色)
影片公司(公司名称,地址)
卡通片(片名,出品年份,设计平台)
数据库实施
创建数据库,定义数据库结构,组织数据入库,调试数据库并进行数据库的试运 行。
运行和维护
数据库正式运行之后,对数据库运行过程中对其进行评价,调整,修改,调优等
数据库设计遵循原则(范式)
范式就是符合某一规范级别的关系模式的集合。共有7种范式
1NF ⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF⊃6NF
第一范式(原子性)
如果一个关系模式R的所有属性都是不可分割的基本数据项,则这个关系属于第一范式
举例说明:(学生选课:学号,姓名,系别,系部地址,课程名称,课程成绩)
Student(s_no,s_name,s_dept,s_location,s_course_name,s_grade)
第二范式(消除部分函数依赖)
定义:若关系模式R属于第一范式,且每个非主属性都是完全函数依赖于主键,则R属于 第二范式。
说明:从2NF的定义可以看出,从2NF开始讨论的是主键和非主属性之间的函数依赖关 系,所以分析关系模式是属于2NF,首先指明关系模式的主键,然后在讨论非主属性和主 键之间的函数依赖关系。
例如:选课关系模式
SC(s_no,c_no,score)中,主键为(s_no,c_no),而非主属性score与主键之间不存在 部分函数依赖关系,所以关系模式SC属于2NF
第三范式(消除传递函数依赖)
定义:若关系模式R属于第一范式,且每个非主属性都不传递函数依赖于主键,则R属于 第三范式。
说明:3NF说明的是非主属性和主键之间的函数依赖关系
例如:选课关系模式
SC(s_no,c_no,score)中,由于除了主键之外,只有一个非主属性score,所以score不可 能构成与主键之间的传递函数依赖,所以SC属于3NF
BC范式(消除主键间的部分函数依赖)
定义:若关系模式R属于第一范式,且每个属性都不传递依赖于主键,则R属于BC范式。
说明:也就是说,在关系模式R中,凡是决定因素的属性或属性集包含键码,决定因素是 函数依赖的左部属性集,比如X->Y,X称为决定因素。
由BC范式的定义可以得到以下的结论,一个满足BC范式的关系模式有:
1、所有非主属性对每一个候选码都是完全函数依赖
2、所有的主属性对每一个不包含它的候选码都是完全函数依赖
3、没有任何属性完全函数依赖于非候选码的任何一组属性
事务并发操作的几种问题
丢失更新:
两个不同事务同时获得相同数据,然后在各自事务中同时修改了该数据,那么先提交的事务更新会被后提交事务的更新给覆盖掉,这种情况先提交的事务所做的更新就被覆盖,导致数据更新丢失。
脏读:
事务A读取了事务B未提交的数据,由于事务B回滚,导致了事务A的数据不一致,结果事务A出现了脏读;
不可重复读:
一个事务在自己没有更新数据库数据的情况,同一个查询操作执行两次或多次得到的结果数值不同,因为别的事务更新了该数据,并且提交了事务。
幻读:
事务A读的时候读出了N条记录,事务B在事务A执行的过程中增加 了1条,事务A再读的时候就变成了N+1条,这种情况就叫做幻读。
注意:幻读是指一种结构上的改变,比如说条数发生了改变;不可重复读是指读出的数值发生了改变。
为了避免数据库事务操作中的问题,MySQL定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。
读未提交(Read Uncommitted):
允许脏读取。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。
读已提交(Read Committed):
允许不可重复读取,但不允许脏读取。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。
可重复读(Repeatable Read):
禁止不可重复读取和脏读取,但是有时可能出现幻读。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。
序列化(Serializable):
提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。
事务的隔离级别越高,对数据的完整性和一致性保证越佳,但是对并发操作的影响也越大。MySQL事务默认隔离级别是可重复读。