事务ACID:
原子性:要求操作要么全部执行,要么全部不执行
一致性:事务提交前后只存在两个状态,提交前的状态和提交后的状态,不会有中间状态
隔离性:事务可以并发执行,但是他们互不干扰,但是有可能不同的事务用到同一个资源,为了保持隔离性使用锁
持久性:事务提交之后,数据库的状态就发生了改变,不管出现什么情况,会通过提交的日志回滚,最终完成操作。
范式:
第一范式:所有的属性都不可再分
第二范式:非主属性完全函数依赖于任何一个候选码。理解:必须有一个数据项作为主键,其他的数据项与主键一一对应。
候选码:某一属性组的值能唯一的标识一个元组,而其子集不行,
第三范式:任何非主属性不依赖于其他非主属性,消除了传递依赖;
BC范式:消除了函数依赖
SQL的执行顺序:
From -> join -> on -> where -> group by -> having -> select -> order by -> distinct -> order by -> limit
Where VS having ;
用的地方不一样:where 可以任何地方 having 只能用于select
执行顺序不一致:
Having子句可以用集合函数 where 不可以、
表与视图的区别:
数据库中的数据是存储在表中,而视图只是一个或者多个表的依照某个条件组合而成的结果集,表可以进行增删改查操作,视图只能进行查询,视图中的增删改操作会依赖于相关的表中的数据,表是物理存在的,视图是虚拟的内存表
表占用物理空间,视图不占用物理空间,视图是一个逻辑概念、
表是内容 视图是窗口,、
联系:视图是在基本表之上建立的表,依据基本表的存在而存在
数据库为什么使用B+树而不是二叉树、B树
二叉树确实减少了查找次数,但是最坏的情况下,二叉树可能退化为顺序查找,当数据库中的数据量特别大时,层次也将特别大,二叉树的高度一般是log_2^n,B树的高度为log_t((n+1)/2) +1 t是树的最小度数
B树:提高了IO性能,并没有解决元素遍历时效率低下的问题,B+ 树就是解决遍历的效率,B+树只需要遍历叶子节点即可实现整棵树的遍历,而B树使用的中序遍历按序查找,
B树:每个节点既保存索引又保存数据,搜索时相当于二分查找 ,所有的叶子结点都在同一层
B+ 树的特点:只有叶子保存数据,搜索时相当于二分查找,增加了相邻节点的指向指针,
B VS B+ :
1、 B+ 树查询时间复杂度是固定的logn ;B 树的查询复杂度最好的情况下就是O(1) (根节点)
2、 B+树相邻节点的指针可以大大的增加区间访问性,可使用范围查询,而B树每个key和data在一起则无法区间查找
3、 B树的每个节点及保存数据有保存索引,所以磁盘IO次数较少,B+树只有叶子结点保存数据磁盘IO比较多,但是区间访问比较好
4、 B树的区间查找过程,查找到范围的下限,通过树的中序遍历一直知道区间的上限,查找过程比较繁琐,B+ 树查找到范围的下限,通过链表指针一直遍历到区间的上限
主要不同点:三个方面:磁盘IO的次数,查询性能,区间查找
MySQL的引擎介绍:
MyISAM:不支持事务,不支持外键,优势是访问速度快;
InNoDB:支持事务,但是处理的效率相对差一些,支持自动增长列,支持外键
MEMORY:使用内存中的内容来创建表,默认使用Hash索引,一旦服务关闭,表中的数据就会全部丢失 hash索引检索效率高,
MEGEG:是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,实际是对MyISAM的操作