知识学了又忘,知识忘了又学,所以我做了速记版本,用自己的理解记录各学科我认为比较重要的知识点,方便复习记忆。
数据模型的组成要素?
答:数据模型由三部分组成:数据结构、数据操作和数据的完整性约束条件。数据结构是描述数据库的组成对象和对象之间的联系;数据操作是数据库中的各种对象允许执行的操作;完整性约束条件是一组完整性规则。
数据库系统的三级模式结构 两级映像?
答:三级模式结构是由外模式、模式和内模式组成。外模式也是子模式或者是用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构,是数据库用户的数据视图。模式是逻辑模式,是数据库全体数据的逻辑结构,是用户的公共数据视图。内模式是存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。模式相当于内模式和外模式的枢纽,外模式是模式的子集,一个数据库只能有一个模式,但是可以有多个外模式,一个数据库也只有一个内模式。两级映像是模式/外模式和模式/内模式。模式/外模式是保证数据与程序的逻辑独立性,当模式改变时(增加新的属性),对各个外模式/模式的映像作出相应的改变,可以保证外模式不变,从而保证应用程序不变。模式/内模式是保证数据与程序的物理独立性,当数据库的存储结构改变时(比如选用了另一种存储结构),模式/内模式作出相应的改变,可以使模式不变,从而应用程序不变。
五种基本关系操作?
答:选择、投影、并、差、笛卡尔积。
关系的完整性?
答:实体完整性(主键)、参照完整性(外键)、自定义完整性。
SQL特点?
答:综合统一(DDL(Data Defination Language:主要是对数据库、表、表结构的操作)、DML(Data Manipulation Language:主要是对数据进行增删改操作)、DQL(Data Query Language:主要对数据进行查询操作)),简单易学。
事务四大特性?
答:ACID。 Begin / start transaction commit / rollback 一致性:A 1000元 B 3000元 A向B转1000元 前后A、B总和要为4000元。
事务并发会出现的问题?
答:脏读、不可重复读、幻读。 脏读:A select、update B select B读到的是A更新但是尚未提交的数据。
不可重复读:A select select B update A两次查询的不一样。
幻读:A select、insert、select B insert A select时发现没有 于是insert 报错存在。
事务隔离级别?
答:四种,安全性越来越高,但性能越来越差。 未提交读:在一个事务提交之前,它的执行结果对其它事务也是可见的。
提交读:一个事务只能看见已经提交的事务所作的改变。
可重复读:可以确保同一个事务在多次读取同样的数据时得到相同的结果。
可串行化:强制事务串行执行,使之不可能相互冲突,从而解决幻读问题。可能导致大量的超时现象和锁竞争,实际很少使用。
B索引、B+索引、Hash索引概念以及对比?
答:B树、B+树、hash索引。
B树:多路平衡查找树。m阶B树,最多可以有m棵子树,m-1个关键字。B树,所有的叶结点都出现在同一层次上,并且不带信息。
B+树:B树的变形。m阶B+树,最多可以有m棵子树,m个关键字。B+树,所有叶结点包含全部关键字及指向相应记录的指针,叶结点中将关键字按大小顺序排列,并且相邻叶结点按大小顺序相互链接起来。
Hash:采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。
视图、存储过程、触发器?
答:视图、存储过程、触发器。
视图:视图是虚表,其中只存储逻辑而不存储具体的数据,增删改查视图都是操作对应的表。可以在操作视图时加上检查选项,with check option,这样在后续增删改操作视图时会检查当前和其依赖的试图或者表。视图更新的条件是视图中的一行必须和基础表中的一行相对应,如果使用了聚合函数或者group by之类无法更新。视图作用:(简单)简化用户对数据的理解和操作;(安全)通过视图用户只能查询和修改他们看到的数据;(数据独立)视图可帮助用户屏蔽真实表结构变化带来的影响。
存储过程:事先经过编译并存储在数据库中的一段SQL语句的集合,想要实现相应功能时,直接调用该存储过程即可。优点:select、update、select……,可能多次操作数据库,那么就会涉及到多次网络请求,所以采用存储过程,实现数据库SQL语言层面的代码封装和重用。
触发器:触发器是与表有关的数据库对象,指在insert、update、delete之前或者之后,触发并执行触发器中定义的SQL语句集合。作用:协助应用在数据库端确保数据的完整性、数据校验等操作。
锁? 全局锁、表级锁、行级锁
答:锁是计算机协调多个进程或线程并发访问某一资源的机制。
全局锁就是对整个数据库实例加锁,加锁之后整个实例就处于只读状态,后续的写操作都会被阻塞。(使用场景:全库的逻辑备份)
表级锁分为表锁、元数据锁(无需显示使用、系统自动控制、主要维护表元数据一致性)、意向锁(解决表锁和行锁的冲突)。
行锁是通过对索引上的索引项加锁来实现的,而不是对记录加锁。
间隙锁主要是防止其他事务插入间隙。
三级封锁协议 两段锁协议?
答:三级封锁协议(数据一致性)、两段锁协议(并行调度可串行)。
一级封锁:事务在修改之前必须先对其加X锁,直到事务结束才释放。
二级封锁:在一级的基础之上,事务在读取数据时必须要加S锁,读完后释放。
三级封锁:在二级的基础上,事务在读取数据之前必须先加S锁,直到事务结束才能释放。
事务必须严格分为两个阶段对数据进行加锁和解锁的操作,第一阶段加锁,也称扩展阶段,第二阶段解锁,也称收缩阶段。
活锁是系统可能使某个事物永远处于等待状态,得不到封锁的机会。(解决方法:先来先服务)
死锁是系统中有两个或者两个以上的事务都处于等待状态,并且每一个事务都在等待另外一个事务解除封锁,它才能继续执行,结果造成任何一个事务都无法继续执行。(解决方法:预防、检测、消除)
MVCC多版本并发控制?
答:多版本并发控制MVCC,MVCC在每行记录的后面都保存了两个隐藏的列。
三大范式和BC范式?
答:第一范式、第二范式、第三范式、BCNF范式。
第一范式:属性不应该是可分的。
第二范式:在1NF基础之上,每个非主属性完全依赖于主属性集。
第三范式:在2NF基础之上,非主属性不传递依赖于主属性。
BC范式:在3NF基础之上,消除主属性对于码的部分与传递依赖。
主从复制?
答:MYSQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。
表的连接方式?
答:内连接、外连接、自连接。
内连接:两表中满足条件的交集。
外连接:左外连接(左+交)、右外连接(右+交)、全外连接。
完结,撒花。
|