本文主要是介绍见面试官前,掏出来看看系列(二)之——数据库原理思维导图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 数据库原理
- SQL语言
- 数据查询语句
- 数据操作语句(DML)
- 数据定义语句(DDL)
- 数据控制语句(DCL)
- 内连接&外连接
- 内连接(自然连接)
- 外连接
- 事务
- 事务必须满足四个属性:
- 原子性
- 一致性
- 隔离性(独立性)
- 持久性
- 存储过程
- 存储过程&函数区别和联系
- 范式
- 目的:
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- 鲍依斯-科得范式(BCNF)
- 第四范式(4NF)
- 触发器
- 触发器&存储过程的区别
- DML触发器
- DDL触发器
- 事前触发&事后触发
- 语句级触发&行级触发
- 视图
- 作用
- union和union all 的区别
- union:
- union all:
- union all 要比 union 操作快
- 日志文件
- 游标
- 优点
见面试官前,掏出来看看系列
本系列旨在为面试者见到面试官之前打发无聊时间之用
缓解面试者见到面试官之前,因为紧张而头脑一片空白又想看点知识点来提高安全感之用
数据库原理
SQL语言
数据查询语句
- select
- 选择符合条件的语句
- select * from table where 条件语句
- 选择符合条件的语句
数据操作语句(DML)
- insert
- 插入一条记录
- insert into table(字段1 ,字段2)values(值1,值2)
- 插入一条记录
- update
- 更新语句
- update table set 字段名 = 字段值 where 条件表达式
- 更新语句
- delete
- 删除记录(可恢复)
- delete from table where 条件表达式
- 删除记录(可恢复)
数据定义语句(DDL)
- 对数据库用户用户、基本表、视图、索引进行定义和撤销。
- truncate
- 清空表数据(不可恢复)
- truncate table 表名
- 清空表数据(不可恢复)
- create
- 数据表的建立
- create table tablename(字段1,字段2)
- 数据表的建立
- drop
- 数据表的删除
- drop table tablename
- 数据表的删除
数据控制语句(DCL)
- 对数据库进行统一控制管理,保证数据在多用户共享的情况下能够安全。
- grant
- 为用户授权系统权限
- Grant <权限> on 表名[(列名)] to 用户 With grant option
- GRANT <权限> ON <数据对象> FROM <数据库用户>
-
- 数据对象可以是表名或列名
- 为用户授权系统权限
- 权限表示对表的操作,如select,update,insert,delete
- revoke
- 收回系统权限
- REVOKE <权限> ON <数据对象> FROM <数据库用户名>
- 收回系统权限
内连接&外连接
内连接(自然连接)
- 只显示符合条件的记录
- 选取两个表中所有匹配的数据,舍弃不匹配的数据
- select fieldlist from table1 [inner] join table2 on table1.column = table2.column
外连接
- 除了显示符合条件的记录,还显示表中的记录
(例如:使用左外连接,还显示左表中的记录) - 左外连接
- LEFT OUTER JOIN
- 右外连接
- RIGHT OUTER JOIN
- 全外连接
- FULL OUTER JOIN
事务
- 事务是数据库中一个单独的执行单元(Unit)
- 当前数据库中更改数据成功时,在事务中更改的数据便会提交。否则,事务就取消或者回滚,更改无效。
事务必须满足四个属性:
原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),即ACID四个属性
原子性
- 当数据修改时,要么全执行,要么全不执行
一致性
- 一个事务执行之前和执行之后,数据库数据必须保持一致性状态
- 由于并发操作带来的数据不一致性包括丢失数据修改、读“脏”数据、不可重复读和产生“幽灵”数据
隔离性(独立性)
- 当两个或多个事务并发执行时,为了保证数据的安全性,将一个事务内部的操作与事务的操作隔离起来,对其他食物都是不可见的
- 数据库四种类型的事务隔离级别
- 不提交的读
- 提交的读
- 可重复的读
- 串行化
- 实现隔离性时解决临时更新与消除级联回滚问题的一种方式
持久性
- 事务完成以后,数据库管理系统(DBMS)保证他对数据库中的数据的修改时永久性的,当系统或介质发生故障时,该修改也永久保持
- COMMIT语句
- 事务启动后,对数据库所作的所哟更改都成为永久性的了(写入磁盘)
- ROLLBACK语句
- 事务启动后,对数据库的所有更改都会被撤销(数据库中的内容返回事务开始之前所处的状态)
存储过程
- 一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它
create procedure sp_name @ [参数名] [类型]asbegin......end
调用存储过程语法:exec sp_name[参数名]
删除存储过程语法:drop procedure sp_name
- 存储过程可以使没有权限的用户在控制之下间接的存取数据库,保证了数据的安全
存储过程&函数区别和联系
- 存储过程作为一个独立的部分来执行,而函数可以作为查询语句的一部分调用
- 存储过程的功能复杂,而函数的功能针对性强
- 存储过程可以返回多个参数,而函数只能返回一个值或对象
- 函数不能直接操作实体表,只能操作内建表
- 存储过程在创建时即在服务器上进行了编译,执行速度比较快
范式
目的:
- 减少数据库中的冗余,以增加数据的一致性。
第一范式(1NF)
- 属性值不能在分裂成更小部分
第二范式(2NF)
- 满足第1NF的同时,数据库中的每一个实例或行必须被唯一的区分
第三范式(3NF)
- 满足2NF的同时,非主键字段不能互相依赖
鲍依斯-科得范式(BCNF)
假设仓库管理关系表为(仓库ID, 存储物品ID, 管理员ID, 数量),满足一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
(仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是仓库管理关系表的的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。把仓库管理关系表分解为二个关系表:
仓库管理:(仓库ID, 管理员ID)
仓库:(仓库ID, 存储物品ID, 数量)
这样的数据库表是符合BCNF范式的。
- 所有非主属性对每一个码都是完全函数依赖
- 所有的主属性对每一个不包含它的码,也是完全函数依赖
- 没有任何属性完全函数依赖于非码的任何一组属性
第四范式(4NF)
职工表(职工编号,职工孩子姓名,职工选修课程)
在这个表中同一个职工可能会有多个职工孩子的姓名,同样,同一个职工也可能会有多个职工选修课程,所以这里存在着多值事实,不符合第四范式。
将职工表分为两个表,使它们只有一个多值事实
职工表一(职工编号,职工孩子姓名)
职工表二(职工编号,职工选修课程)
两个表都只有一个多值事实,所以符合第四范式
- 把同一表内的多对多关系删除
触发器
- 触发器是一种特殊类型的存储过程
- 由事件触发,自动完成SQL语句
- 使用触发器可以保证数据的有效性和完整性,完成比约束更复杂的数据约束
触发器&存储过程的区别
- 触发器当操作DML语句时隐式的调用,而存储过程从一个应用或过程中显示调用
- 在触发器体内禁止使用COMMIT和ROLLBACK语句
- 触发器不能接受参数输入,而存储过程可以接受参数输入
DML触发器
- After触发器
- 记录改变之后进行的一种触发器
- InsteadOf触发器
- 记录改变之前,执行触发器本身定义的操作
DDL触发器
- 响应数据定义语句事件时执行的存储过程
事前触发&事后触发
- 事前触发:用于验证一些条件或进行一些准备工作,获得之前和新的字段值
- 事后触发:收尾工作,保证事务的完整性
语句级触发&行级触发
- 语句级触发:在语句执行之前或之后执行
- 行级触发:在触发器影响的行触发一次
视图
- 从数据的基本表中选取出来的数据组成的逻辑窗口。与基本表不同,它是个虚表
作用
-
可以简化数据查询语句
-
可以使用户能从多角度看待同一数据
-
通过引入视图可以提高数据的安全性
-
视图提供了一定程度的逻辑独立性
-
定义视图可以将表与表之间的复杂的操作连接和搜索条件对用户不可见,故增强了数据的安全性,但不能提高查询的效率
union和union all 的区别
union:
- 对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序
union all:
- 对两个结果集进行并集操作,包括重复行,不进行排序;
union all 要比 union 操作快
日志文件
-
记录数据库,故障发生以及恢复数据的信息
-
每一个数据库至少包含两个日志文件组。每个日志文件组至少包含两个日志文件成员
-
日志文件组以循环方式进行写操作
-
每一个日志文件对应一个物理文件
-
【注意】:如果数据库中的日志满了,就只能执行查询等读操作,不能执行更改,备份等写操作
游标
- 从包含多条数据记录的结果集中每次提取一条记录
- 游标由结果集和结果集中指向特定记录的游标位置组成的
优点
- 在使用游标的表中,对行提供删除和更新的功能
- 游标将面向集合的数据库管理系统和面向行的程序设计连接了起来
这篇关于见面试官前,掏出来看看系列(二)之——数据库原理思维导图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!