面试题总结——数据库
1.常见三种引擎的区别
InnoDB:支持事务处理,支持外键,(支持行级锁和表级锁,默认为行级锁),有64TB的存储限制。若需要对事务的完整性要求比较高,需要实现并发控制,则选择InnoDB;
MyISAM:不支持事务和外键,(仅支持表级锁),插入速度快,空间和内存使用比较低。若表主要用于数据的插入与读取,读操作远多于写操作,则选择MyISAM;
MEMORY:不支持事务和外键,所有的数据都在内存中,数据处理速度快,但安全性不高。若表需要很快的读写速度,则需要选择MEMORY。
2.数据库三大范式
第一范式:列不可分;
第二范式:有主键,保证完全依赖(若主键是多列则需要同时
依赖这多列)
第三范式:无传递依赖(非主键列A依赖非主键列B,而B依赖主键,这样属于传递依赖,不符合3NF)
3.char,varchar,text的区别
char:长度固定,最大长度255;
varchar:可变长度,可设置最大长度(最大65535)
text:不设置长度,存储可变长度的非Unicode数据(text一般存储长度比较大的字段)
4.drop,delete的区别
drop:从数据库中删除表,所有的数据行,索引,权限、触发器也会被删除,不能回滚。
delete:删除表的全部或一部分数据行,每删除一行,都会在事务日志中记录一下,执行delete后用户需要提交(commit)或回滚(rollback)来执行删除或撤销删除。
5.内外连接的区别
内连接:驱动表中的记录在被驱动表中找不到匹配的记录,该记录不会被加入到最终的结果集。SELECT * FROM t1 [INNER | CROSS] JOIN t2 [ON 连接条件] [WHERE 普通过滤条件];
外连接:驱动表中的记录即使被驱动表中没有匹配的记录,仍会被加入到最终的结果集,对应的列使用NULL填充
左外连接:结果集包含左表的全部记录以及右表中符合连接条件的记录,如果左表的某行在右表中没有匹配行,则在左外连接的结果集中右表的这些行对应的所有列都为null。SELECT * FROM t1 LEFT [OUTER] JOIN t2 ON 连接条件 [WHERE 普通过滤条件];
右外连接:结果集包含右表的全部记录以及左表中符合连接条件的记录,如果右表的某行在左表中没有匹配行,则在右外连接的结果集中左表的这些行对应的所有列都为null。SELECT * FROM t1 RIGHT [OUTER] JOIN t2 ON 连接条件 [WHERE 普通过滤条件];
内外连接本质区别:在驱动表中的记录不符合ON子句中的连接条件时会不会把该记录加入到最终的结果集
索引
1.索引简介
索引是对数据库表中一列或多列的值进行排序的数据结构,以协助快速查询、更新数据库表中数据。
2.索引分类
①主键索引:一个表中,最多有一个主键索引,主键索引的列不可重复也不能为null,效率较高;
②唯一索引:一个表中,可有多个唯一索引,唯一索引的列不可重复但可以为null,效率较高;
③普通索引:一个表中,可有多个普通索引,普通索引的列可以有重复的值;
④全文索引:文章字段或有大量文字的字段进行检索,可使用全文索引机制(存储引擎必须是MyISAM)
3.索引优缺点
3.1.为什么要使用索引(优点)
①提高数据查询效率。
②通过创建唯一性索引,保证数据库表中每一行数据的唯一性。
3.2.怎么不在所有列上都添加索引(缺点)
①当对表中的数据进行增加、删除和修改时,索引需要动态维护,降低了数据的维护速度。
②索引需要占一定的物理空间,会需要更大的空间。
③创建和维护索引都需要耗费时间,且时间会随着数据量的增加而增加。
4.索引的底层原理
InnoDB底层使用B+树实现索引。