【面试】数据库方面

1.什么是主键、超键、候选键和外键?

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

2.数据库事务的四个特征及含义?

  1. 数据库事务(Transaction)正确执行的四个基本要素。ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability)。
  2. 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始状态,就像整个事务从来没有执行过一样。
  3. 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
  4. 隔离性:隔离状态执行事务,使它们好像是系统给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性又被称为串行化,为了防止事务操作间的混淆,必须串行化或者序列化请求,使得在同一时间仅有一个请求用于同一数据。
  5. 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

3.为什么数据库表需要索引?  

  1. 通过创建唯一性索引,可以确保数据库表中每一行数据的唯一性。
  2. 可以大大加快数据库表的检索速度,这也是创建索引的最主要原因。
  3. 可以加快表与表之间的连接,特别实在实现数据的参考完整性方面特别有意义。

4.SQL语句优化

  1. 应尽量避免在 where 子句中使用 != 或 <> 操作符 , 否则将导致引擎放弃使用索引而进行全表扫描。
  2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
    select id from t where num is null
    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
    select id from t where num=0
  3. 很多时候使用 exists 代替 in 是一个好的选择。
  4. 用 where 子句替换 HAVING 子句 ,因为 HAVING  只会检索出所有记录之后才会对结果集进行过滤。

5. 存储过程和触发器的区别

  1. 触发器不能使用 EXECUTE语句调用,而是用户在执行Transact-SQL语句时自动触发(激活)执行。
  2. 触发器不同于存储过程,触发器主要通过事件执行出发而被执行的,而存储过程可以通过存储过程名称而直接调用。

 

posted @ 2019-06-15 10:08  快速奔跑的大米粒  阅读(171)  评论(0编辑  收藏  举报