1. 什么是三范式?
第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表不存在如下依赖关系: 关键字段 → 非关键字段x → 非关键字段y
通俗地说:
首先要明确的是:满足着第三范式,那么就一定满足第二范式、满足着第二范式就一定满足第一范式
第一范式:字段是最小的单元不可再分;
学生信息组成学生信息表,有年龄、性别、学号等信息组成。这些字段都不可再分,所以它是满足第一范式的
第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而不是部分主键;
其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依赖于主键,也就成了唯一的
学号为1024的同学,姓名为Java3y,年龄是22岁。姓名和年龄字段都依赖着学号主键。
第三范式:满足第二范式,非主键外的所有字段必须互不依赖。
就是数据只在一个地方存储,不重复出现在多张表中,可以认为就是消除传递依赖比如,我们大学分了很多系(中文系、英语系、计算机系……),这个系别管理表信息有以下字段组成:系编号,系主任,系简介,系架构。那我们能不能在学生信息表添加系编号,系主任,系简介,系架构字段呢?不行的,因为这样就冗余了,非主键外的字段形成了依赖关系(依赖到学生信息表了)!正确的做法是:学生表就只能增加一个系编号字段。
2. 什么是存储过程及其优缺点?用什么来调用?
存储过程: 存储过程是一个预编译的SQL语句。
优点:
① .允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。
② .如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
缺点:
① . 每个数据库的存储过程语法几乎都不一样,十分难以维护(不通用)
② .业务逻辑放在数据库上,难以迭代
调用:
1) .可以用一个命令对象来调用存储过程。
2) .可以供外部程序调用,比如:java程序。
3. 什么是视图及其应用场景有哪些?
视图:视图是一种基于数据表的一种虚表;
① . 视图是一种虚表;
② . 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表;
③ . 向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句;
④ . 视图向用户提供基表数据的另一种表现形式;
⑤ . 视图没有存储真正的数据,真正的数据还是存储在基表中;
⑥ . 程序员虽然操作的是视图,但最终视图还会转成操作基表;
⑦ . 一个基表可以有0个或多个视图。
4. 视图的优缺点?
优点:
1) 对数据库的访问,因为视图可以有选择性的选取数据库里的一部分;
2) 用户通过简单的查询可以从复杂查询中得到结果;
3) 维护数据的独立性,试图可从多个表检索数据;
4) 对于相同的数据可产生不同的视图。
缺点:
查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么就无法更改数据。
5. 游标是什么?
游标:游标是指向查询结果集的一个指针,它是一个通过定义语句与一条select语句相关联的一组SQL语句。可以对查询出来的结果集作为一个单元来有效的处理。
游标包含两方面的内容:
1)游标结果集:执行其中的select语句所得到的结果集;
2)游标位置:一个指向游标结果集内的某一条记录的指针。
游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标却显得十分重要。
6. 数据库的锁机制
数据库的锁机制保证在一个事务释放锁之前,其他事务不可以进行修改。
悲观锁:事务每次操作之前假设有其他事务会修改需访问的数据,会要求上锁。
乐观锁:事务每次操作之前假设没有其他事务会修改需访问的数据,不会要求上锁。
共享锁:对某一资源加共享锁,自身可以读该资源,其他人也可以读该资源
共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享。
7. 数据库的乐观锁和悲观锁?
确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性,乐观锁和悲观锁是并发控制主要采用的技术手段。
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
在查询完数据的时候就把事务锁起来,直到提交事务
实现方式:使用数据库中的锁机制
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
在修改数据的时候把事务锁起来,通过version的方式来进行锁定
实现方式:使用version版本或者时间戳。
8. Drop、delete和truncate区别
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE,DELETE,DROP 放在一起比较:
<