当前位置: 首页 > database>阅读正文

数据库常考题

2022.1.7 朱丰华 42 次 留下评论 1524字

1.左连接和右连接的区别?

当两张表存在连接关系时,

  • 如果使用左连接,那么左边中必须存在字段信息否则不显示。
  • 如果使用右连接,那么右边中必须存在该信息。
  • 如果使用满外连,左边或者右边存在信息均可以。

可以理解为左右两表有顺序关系,以左连接为例,左边是基础表,如果左边查不到,那么右边不执行。

2.多表查询有几种方式?

  • 内连接(隐式内连接,显式内连接)
  • 外连接(左外连,右外连,满外连)
  • 子查询,有多种使用场景

3.sql函数有哪些分类?

单行函数,多行函数(聚合函数)

4.sql语句的分类?

  • DDL:数据库定义语句,操作数据库和表
  • DML:数据库操作语言,表内容的增删改
  • DQL:数据库查询语言,表内容的查询
  • DCL:数据库控制语言,数据库、表、用户权限控制

5.简述drop、delete、truncate的区别?

三者都可以用于删除,drop可以用于删除表,delete按条件按行删除表中的内容,truncate删除表并重新生成空表。

6.简述三大范式

  • 第一范式:列的原子性
  • 第二范式:所有列对主键依赖
  • 第三范式:列中没有传递依赖

7.简述索引及其作用?

  • 索引分为普通索引(index),提高查询速度
  • 唯一索引(unique),限制唯一
  • 主键索引(primary),限制唯一和非空
  • 全文索引(fulltext),大量数据时提高查询速度

一般来说,抽取不重复的值组成b+树,可以让系统更快的找到数据所在的磁盘块。

如果使用了太多的索引,非但不能提高查询速度,反而有可能降低,对重复率很大的字段(如性别)索引选择性低则索引效率低。

8.什么存储过程,有什么作用?

存储过程(procedure)是特定sql语句编译后的产物,存储过程可以直接调用(如果有参数可以传递参数),它的好处可以总结为:

  • 执行效率高
  • 降低网络流量
  • 复用性高
  • 可维护性高
  • 安全性高

9.什么是事务,有什么特性?

事务是一系列sql操作的集合,这些操作要么全部成功,要么全部失败。

  • 原子性:不可分割的最小操作单位,要么全部成功,要么全部失败。
  • 持久性:数据提交或回滚后,数据会持久化
  • 隔离性:多个事务之间相互独立。(实际上有隔离等级)
  • 一致性:事务操作前后,数据总量不变

10.什么是视图?以及应用场景?

视图是一张虚拟的表,具有和物理表相同的功能,可以对视图进行增、删、改、查操作。对视图的修改不影响基本表中的数据。对比多表查询,它使我们获取数据更加容易,例如以下场景:

  • 只暴露表中部分字段
  • 数据来源于不同的表,而查询者希望以统一方式查询

11.什么是乐观锁和悲观锁?

乐观锁,认为没有并发冲突,仅在提交时检验数据的完整性

悲观锁,认为必然存在并发冲突,屏蔽一切可能违反数据完整性的操作。

12.数据库系统的三级模式结构?

  • 模式:是模式结构的中间层,是数据库中全部数据的逻辑结构和特征的描述,是所有用户的公共数据视图
  • 外模式:是数据库用户能够看见和使用的局部数据的逻辑结构和特征描述,是数据库用户的数据视图
  • 内模式:一个数据库只有一个内模式,它是数据物理结构和存储方式的描述,是数据和数据库内部的表示方式

13.何时进行数据库的分表?怎么分表?

一般不建议在项目初期分表,这样会增加数据维护难度。

当项目创建3年内单表数据量超过2000万行或总量超过500GB,此时就可以考虑分表。因为此时基本上到达数据库的性能瓶颈,通过索引或其他方式优化不明显。

  • 垂直分割:按照功能模块、关系的密集度进行分割,分割到不同的库中
  • 水平分割:按照表中的某种规则,把数据分离到多个结构相同的表中。

14.如何防止sql注入?

首先应该理解什么情况下会出现sql注入?仅字符串拼接时才会出现,如果是预编译sql则不会。

在mybatis中,如果使用${}则为字符串拼接有sql注入的风险,如果是#{}则为预编译不会被注入

本篇完,还有疑问?留下评论吧

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注