1. 什么是存储过程?存储过程用什么调用?存储过程的优缺点?

    2. 什么是触发器?

    3. 什么是事务?事务的 ACID 特性解释?事务的类别有哪些?

    4. 数据库三个范式?五大约束?

    5. 并发控制里面的乐观锁和悲观锁是什么?

    6. 什么是 E-R 图?

    7. 什么是游标?

    8. 什么是视图?视图的使用场景有哪些?

    9. 什么是索引?索引的作用是什么?索引的优缺点?

    10. 使用索引查询一定会提高查询的性能吗?

    11. 超键、候选键、主键、外键分别是什么?

    12.drop、delete、truncate 的区别是什么?

    13. 数据表的行列转换


    1. 什么是存储过程?存储过程用什么调用?存储过程的优缺点?

    • 存储过程:存储过程是数据库中的一个重要对象。其是一组可实现特定功能的 sql 语句集,可以传入参数,可类比 python 中的自定义函数。
    • 存储过程用命令对象来调用,exec sp_name [参数名]
    • 存储过程的优缺点:

    优点:1. 存储过程的 sql 语句都是预编译过的,执行速度比较快。

    1. 存储过程主要在服务器上运行,可降低对客户机的压力,进而减少通信量。

    2. 可保证数据的安全性和完整性。通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。

    缺点:1. 存储过程参数修改比一般代码麻烦。

    1. 存储过程调试过程复杂且繁琐。

    2. 什么是触发器?

    触发器是一种特殊类型的存储过程,触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。

    3. 什么是事务?事务的 ACID 特性解释?事务的类别有哪些?

    • 事务是并发控制的基本单元。可以看作是一组 sql 语句,这些 sql 语句或者全部执行或者全部不执行,以一个不可拆分的单元存在。
    • 事务的 ACID 特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

    原子性指的是事务不可再分的工作单位。

    一致性指的是事务确保数据库从一个一致状态转变为另一个一致状态。一致状态表示数据库中数据满足完整性约束。

    隔离性指的是多个事务之间的操作相互独立。

    持久性指的是事务一旦提交,其结果就是永久性的。

    • 事务的类别有扁平事务、带有保存点的扁平事务、链事务、嵌套事务、分布式事务。

    4. 数据库三个范式?五大约束?

    • 三个范式:

    第一范式(1NF)指在关系模型中,数据库表中的每一列都是不可再分的原子数据项,不能是集合、数组等非原子数据项。

    例如,地址:中国上海 不符合第一范式,应该改为 国家:中国,城市:上海

    第二范式(2NF)指的是在第一范式基础上,非键字段必须依赖键字段。

    例如,字段:订单号,下单日期,产品名称,产品价格 不符合第二范式,产品名称和产品价格不是订单号决定的,但是订单号和下单日期是符合第二范式的。

    第三范式(3NF)指的是在第二范式基础上,任何非主键列直接依赖主键列,不能是通过其他非主键列传递依赖主键列。

    • 五大约束:

    主键约束 — 唯一性,非空性

    唯一约束 — 唯一性,可以空,但只能有一个

    检查约束 — 对该列数据的类型、范围进行限制,如非空约束

    默认约束 — 数据的默认值

    外键约束 — 引用主表的列与另外的表建立关系

    5. 并发控制里面的乐观锁和悲观锁是什么?

    • 乐观锁即乐观并发控制,假设不会发生并发冲突,在数据提交更新的时候检查数据生成版本是不是修改之前版本 + 1,是的话正常提交更新,不是的话返回错误警告,用户决定是继续提交更新还是放弃提交更新。
    • 悲观锁即悲观并发控制,假设会发生并发冲突,在数据修改之前锁定数据,直到提交更新数据后解锁。

    6. 什么是 E-R 图?

    E-R 图即实体联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的模型。

    矩形框 —- 实体

    椭圆形框 — 属性

    菱形框 — 联系

    连线 — 存在于实体与属性之间,实体与联系之间

    数据库基本知识点 - 知乎 - 图1

    7. 什么是游标?

    游标提供了 一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标是由结果集和结果集中指向特定记录的游标位置组成。

    8. 什么是视图?视图的优点?视图的使用场景有哪些?

    • 视图,是从一个或多个表中导出的表。视图是一种虚拟的表,不进行实际存储,但是具有和物理表相同的功能。对视图进行增删改查不会影响基本表。
    • 视图的优点:
    1. 简单性。用户筛选出需要的行或列进行操作,不必每次都指定所有筛选条件。

    2. 安全性。只开放部分字段或行数的权限给用户,不将整个基础表的权限开放。

    3 逻辑独立性。视图和基础表的修改相互独立。

    • 视图的使用场景:
    1. 多次使用到相同条件的查询结果时,可以将该查询结果作为视图供后续使用。

    2. 开放权限给其他部门的人,不想暴露本部门机密信息,可以建立视图开放视图权限。

    9.什么是索引?索引的作用是什么?索引的优缺点?

    • 索引,是对数据库表中一或多个列的值进行排序的结构,可以帮助数据库快速获取数据。
    • 索引的作用, 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的语句执行得更快,可快速访问数据库表中的特定信息。
    • 优缺点

    优点:

    1. 在设计数据库时,通过创建一个惟一的索引,能够在索引和信息之间形成一对一的映射式的对应关系,增加数据的惟一性特点。

    2. 能提高数据的搜索及检索速度,符合数据库建立的初衷。

    3. 能够加快表与表之间的连接速度,这对于提高数据的参考完整性方面具有重要作用。

    4. 在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。

    5. 建立索引之后,在信息查询过程中可以使用优化隐藏器,这对于提高整个信息检索系统的性能具有重要意义

    缺点:

    1. 在数据库建立过程中,需花费较多的时间去建立并维护索引,特别是随着数据总量的增加,所花费的时间将不断递增。

    2. 在数据库中创建的索引需要占用一定的物理存储空间,这其中就包括数据表所占的数据空间以及所创建的每一个索引所占用的物理空间,如果有必要建立起聚簇索引,所占用的空间还将进一步的增加

    3. 在对表中的数据进行修改时,例如对其进行增加、删除或者是修改操作时,索引还需要进行动态的维护,这给数据库的维护速度带来了一定的麻烦。

    10. 使用索引一定能提高查询性能吗?

    一般情况下, 通过索引查询数据比全表扫描要快. 但是也不是绝对的.

    原因:

    索引需要空间来存储, 也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改. 这意味着每条记录的 INSERT, DELETE, UPDATE 将为此多付出 4,5 次的磁盘 I/O. 因为索引需要额外的存储空间和处理, 那些不必要的索引反而会使查询反应时间变慢. 使用索引查询不一定能提高查询性能, 索引范围查询 (INDEX RANGE SCAN) 适用于两种情况: 1. 基于一个范围的检索, 一般查询返回结果集小于表中记录数的 30%; 2. 基于非唯一性索引的检索

    11. 超键、候选键、主键、外键分别是什么?

    • 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键
    • 候选键:是最小超键,即没有冗余元素的超键
    • 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)
    • 外键:在一个表中存在的另一个表的主键称此表的外键

    12.drop、delete、truncate 的区别是什么?

    • DROP 删除表结构和数据,truncate 和 delete 只删除数据
    • truncate 操作,表和索引所占用的空间会恢复到初始大小;delete 操作不会减小表或索引所占用的空间;drop 操作释放表或索引的占用空间。
    • truncate 和 drop 是 DDL,操作立即生效,delete 是 DML,手动提交操作才生效。delete 操作可以结合 where 条件,并且删除操作会被记录到日志,后续可以回滚恢复。
    • 一般速度上来说,drop>truncate>delete
    • truncate 只能对 table,delete 可以是 table 和 view

    13. 数据表的行列转换

    数据库基本知识点 - 知乎 - 图2
    https://zhuanlan.zhihu.com/p/54165946