1.什么是主键
主键是由一个或多个字段组成具有唯一和表示作用的数据列或属性组合,且值不为空
2.为什么用主键
因为索引的底层采用了B+树的原理,B+树是有序且具有指向功能的,每个叶子节点都可以存放多个数据,当你插入一条记录时,会根据此主键将数据存放到合适结点中的合适位置,若一个叶子结点达到了一个装载因子Innodb默认为15/16,就会开辟一个新的叶子结点,也就是页面.如果需要执行查找的时候,B+树会先发挥快速定位的功能,先定位到哪一个节点,再遍历这个节点中的数据找到需要的数据.
3.B+树
B+树继承了B树快速定位的功能,还拥有特有的指向功能也就是范围查找,B+树的叶子结点包含了所有的数据,所以在查找具体某一条的数据时,先确定一个范围,定位到具体的叶子节点,再从这个节点中找到自己想要的数据
如上图,是一颗b+树,关于b+树的定义可以参见B+树,这里只说一些重点,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。
把需要查找的数据用二分法和最上面的磁盘块一进行对比并加载进内存(一次IO),然后通过P1 P2 P3指针指向指定的磁盘块加载进内存(二次IO),再通过二分法确定指针找到具体的磁盘块加载进内存(三次IO),在整个磁盘块里找到具体的数据,几次IO取决于B+树的高度。
理解:B+树的非叶子节点因为不存储数据,所以有更多的空间存储指向数据和指针,每一次IO不单单把指向数据给获取到了,还可以把相邻的数据也获取到了,存在内存的缓冲区,这些读取到的数据成为page,所以B+树种的一页都有多个指向数据。
4.触发器
触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发
5.存储过程???
存储过程是一个预编译的sql语句,只需要创建一次,以后就可以多次调用.存储过程比单纯的sql语句执行要快
可以用一个命令对象来调用,可以由外部程序来调用
优点:
1)因为是预编译过的,所以执行效率高
2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。
3)安全性高,执行存储过程需要有一定权限的用户。
4)复用性高,存储过程可以重复使用,可减少数据库开发人员的工作量。
缺点:移植性差
6.什么是视图和游标?
视图:
是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。
游标:
是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
7.视图的优点和缺点
优点:
1对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
2)简单的查询可以代替复杂查询得到结果。
3)维护数据的独立性,试图可从多个表检索数据。
4)对于相同的数据可产生不同的视图。
缺点:
性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据