一、数据库基本概念
1. 超键、候选键、主键、外键是什么?
超键:能唯一标识某条数据的属性集合,比如身份证号、学号等等。
候选键:最小的超键。比如学号或身份证号。
主键:人为规定的候选键,能够标识出某一条数据。
外键:另外一个表的主键在这个表中的引用称为外键,用来描述两个表的关系。
2. 什么是存储过程?有哪些优缺点?
存储过程是一组预编译的SQL语句,封装了多个SQL,就像编程语言中的函数一样,创建一次,就能被多次调用。
优点:
- 存储过程是预编译过的,执行效率比单独执行每一条语句要高。
- 存储过程的代码存在数据库中,通过存储过程名直接调用,可以减少网络通信量。
- 存储过程可以重复使用,有效减少开发人员的工作量。
缺点:
- 将核心逻辑放在数据库中,难以更新、迭代。
- 移植性差,不同数据库的存储过程实现几乎不同。
3. 什么是触发器?有什么作用?
触发器是一种特殊的存储过程,通过事件的触发来执行,比如修改、插入、删除特定表中的数据时执行。可以用来强化约束,维护数据的完整性和一致性。比如说删除某个班级后,将属于该班级学生的班级置为空。
4. 什么是视图?有什么作用?
视图是一种虚拟的表,建立在现有表的基础上,通常为一个或多个表的子集。
有时候,我们不希望表中的所有字段被看到,就可以将表中的部分字段封装为一个视图,以供他人查询。而且,对于一些复杂的连结查询,使用视图能让开发者注重逻辑,简化编码流程。
5. 三个范式是什么?
第一范式:字段是最小的单位,不可再分。例如姓名字段,不能拆分成姓和名。
第二范式:表中的字段必须完全依赖于主键。例如我的姓名是xxx,我的年龄是21,这都依赖于主键学号。
第三范式:表中的字段都与主键直接相关,而不能间接相关。例如订单表中关联用户信息,那么就只用关联id就行,不用把用户的姓名、年龄等等信息都加入。这样能消除传递依赖,就是当用户信息更改后,还需要更改订单表中的一堆字段。
6.什么是事务?事务有哪些隔离级别?
事务指的是一个操作序列,要么同时成功,要么同时失败,它是一个不可分割的工作单位。
事务有四个特性:
- 原子性:事务中的所有操作像原子一样不可分割。
- 一致性:事务执行后,必须从一个一致性状态转为另一个一致性状态。
- 隔离性:并发执行的事务不会相互影响。
- 持久性:事务一旦提交,对数据库的更改是持久的。
事务的隔离级别,就和以下几种并发异常相关:
- 脏读:事务A修改了数据,未提交。事务B读到了这个未提交的数据,然后事务A回滚了数据,这样,事务B就读到了错误的数据。
- 不可重复读<