【数据库】常见问答题整理

Q1:常见的关系型数据库管理系统产品有?

Oracle、Sql Server、mysql、Sybase

Q2:SQL语言包括哪几部分?每部分有些什么关键字?

SQL语言包括数据定义(DDL)、数据操纵(DML)、数据控制(DCL)和数据查询(DQL)四个部分

DDL:Create Table , Alter Table , Drop Table , Create/Drop Index 创建/删除——表/索引
DML: Select , Insert, Update, Delete 增删改查
DCL: grant, revoke 授权和撤销授权
DQL:select

Q3: 完整性约束包括哪些?

完整性约束主要有三种,分别是实体完整性、参照完整性和用户自定义完整性。
其中前两种属于数据库系统要求,而用户自定义完整性是从用户角度出发存在的。
实体完整性是指(主码),一个或一组属性是基本关系R的主属性,则该属性不能取空置(不能无意义、不知道、不存在)
参照完整性是指(外码),若某个属性或属性组F是基本关系R的外码,则要么它取空值,要么与关系S的主码相对应,等于S中的某个元祖的主码值
用户自定义完整性,是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。

Q4: SQL约束有哪几种?

实体完整性约束,是主键Primary key,用于控制字段内容不重复,一个表中只允许一个主键
参照完整性约束,是外键Foreign Key,用于表与表之间的参照连接,用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须指向被参考表中的某个值
域完整性约束,是指表中的列必须满足某种特定的数据类型约束,包括取值范围、精度等。
用户定义的完整性是针对某一具体应用的数据必须满足的语义要求。主要有属性上的约束条件
Not NULL,用于控制字段的内容非空
Unique,用于控制字段内容不能重复,可以有多个
Check,用于控制字段的值得范围,检查列值是否满足某一个条件表达式

Q5: 可以用什么来确保表格里的字段只接受特定范围的值

check可以用来限制输入该列的值,在某个范围内

Q6: 什么是基本表?什么是视图?

基本表是本身独立存在的表,在SQL中一个关系就对应一个基本表。
视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。可以对视图进行增删改查的基本操作,但对视图的修改并不影响基本表。因为数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。

Q7: 视图的优点

便捷:视图可以简化用户的操作
角度:使用户从多个角度看待同一数据
逻辑独立:视图对重构数据库提供了一定程度的逻辑独立性
安全性:视图能够对机密数据提供安全保护

Q8: 解释相关子查询和不相关子查询

在嵌套查询中,如果子查询的查询结果不依赖于父查询,成为不相关子查询;如果子查询的查询条件依赖于父查询,称为相关子查询

Q9: drop\delete\truncate的区别

删除内容:delete和truncate只能删除表中的数据,delete每次从表中删除一行数据,truncate可删除整个表的数据,但它们不能删除表的结构,drop则是将表的数据和结构一起删除。
删除后,delete属于数据操纵语言DML,删除操作会作为事务记录在日志中保存,因此删除后可以进行回滚操作,撤销delete操作,而truncate和drop是数据定义语言DDL,一旦执行无法回滚。
执行速度上,truncate和drop速度更快。
如果与事务相关的操作,还是要用delete

Q10: drop\delete\truncate的应用场景

不再需要一张表时,就用drop整张表删除
删除部分数据行的时候,用delete即可,并且可以用where子句限定删除行
需要保留表,但是要清空数据的时候,就可以用truncate

Q11: 数据库索引

数据库索引类似一个书的目录,能加快数据库的查询速度。
索引是一种数据结构,可以对数据库表中一个或多个列的值进行排序,加速了数据访问,查找特定内容时不需要去扫描整张表来得到需要的数据,只需要根据索引找到对应地址即可。类比于查找某个知识点时,不需要翻遍整本书的内容,只需要在目录部分找到对应的内容即可。

Q12: 什么时候不要创建索引

索引主要的用处用于加速查询,所以对查询需要比较少的数据库可以减少使用或者不使用索引
对数据量、规模比较小的数据库,可能只有几条记录,扫描这样的表本身不需要很长时间,也不需要建立索引,如果增加了索引,反而增加了系统需要维护的内容和占用了不必要的空间
经常需要修改的表,也尽可能减少索引,就像数据结构中的链表和顺序表,索引是为了方便检索,但是增删改的操作过于频繁也会浪费大量操作在修改索引上

Q13: 索引优化

建立索引的目的是为了加速查找,数据结构中关于查找的思路主要是从两方面来优化,一方面是数据结构,选择适合的数据结构,B树或者是hash散列表;另一方面可以选择可合适的查找算法,顺序查找、折半查找、分块查找
另外,计算机的问题也可以大致分为硬件和软件两方面,软件其实是对硬件资源调度的分配和优化。
硬件上,查找主要是cpu访存的时间和空间上的消耗,建立索引的表一般比较大,不可能全部存在内存中,也就是cpu访问某个表时需要访问磁盘,产生磁盘I/O调度,cpu分配等问题,因此数据结构与算法的选择要尽可能协调好这些问题,就可以做到优化。

Q14: 索引的优缺点

优点:
通过建立索引,可以极大的提高在数据库中获取所需信息的速度,同时还能提高服务器处理相关搜索请求的效率
除了加快本身数据的检索速度,也可以用在外键上,加快表与表之间的连接速度
缺点:
需要花时间去建立维护索引表,数据不断增加的情况下,所花费的时间也会增加
建立索引需要占用一定的物理空间,如果操作系统中,对一个磁盘管理,需要有一个类似索引表的东西来对磁盘中每个数据进行管理,这个表本身也有空间占用

Q15: 主键、外键、索引的区别

主键:唯一标识一条记录,不能有重复的,不允许为空。可以保证数据实体完整性,且只能有一个主键。
外键:表的外键可以为空,或者是另一个表的逐渐,用来与其他表建立联系,保证表的参照完整性,一个表可以有多个外键。
索引:索引没有重复值,但可以有一个控制,可用来提高查询排序的速度,一个表可以有多个唯一索引

Q16: 什么是事务,及其特征

事务,是一系列不可分割的数据库操作序列,也是数据库并发控制的基本逻辑单位。
事务的四个基本要素:ACID
原子性(Atomicity):即事务是一段操作,要么全部被执行,要么全部回滚
一致性(Consistency):事务的执行时的数据库从一种状态转换成另一种状态,与原子性联系紧密
隔离线(Isolation):在事务提交之前,不允许把该事务对数据的任何改变提供给其他事务
持久性(Durability):事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。即一旦提交,事务对数据库中数据的改变是永久的。

Q17: 什么是游标

SQL是面向集合的,一条SQL语句可以产生或处理多条记录,而嵌入式SQL的主语言是面向记录的,一组主变量一次只能存放一条记录。所以主变量不能满足SQL语句输出数据的要求,因此嵌入式SQL引入了游标,来协调这两者的处理方式。
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标去都有一个名字。用户通过游标注意获取记录并赋给主变量,交给主语言进一步处理。

Q18: 什么是触发器

触发器是与表相关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。可以协助应用在数据库端确保数据库的完整性

Q19: 什么是存储过程?用什么来调用

存储过程类似于其他语言中的函数。是由过程化SQL语句书写的过程,这个过程经过编译和优化后存储在数据库服务器中,使用时只要调用即可。
使用Call/Perform等方式激活存储过程的执行。在过程化SQL中,数据库服务器支持在过程体中调用其他存储过程。

格式:
CALL / PERFORMANCE PROCEDURE 过程名

Q20: 存储过程有哪些优缺点

优点:能够将一段操作的代码封装起来,保存在数据库中,每次使用只需要调用即可,比每次都要一句一句的实现节约了很多编程时间,而且存储过程编译后存放在数据库中,每次调用可以直接执行,效率更高
缺点:每个数据库的存储过程语法几乎不一样,兼容性很差,不能通用,需要把业务逻辑放在服务端如JAVA部分来实现。

Q21: 范式的理解

第一范式(1NF):关系模式R中的所有属性都是不可分的基本数据项,则R属于1NF。第一范式是对关系模式最起码的要求,不满足第一范式的数据库模式不能称为关系数据库。
第二范式(2NF):若关系模式R属于1NF,并且每一个非主属性都完全依赖于R的码,则R属于2NF
第三范式(3NF):若关系模式R<U,F>中若不存在这样的码X,属性组Y及非主属性Z(Z不包含于Y),是的X->Y(Y不能确定X),Y->Z成立,则称R<U,F>属于3NF。(第三范式在第二范式的基础上,消除了传递依赖)
BCND,修正的3NF或扩充的3NF:若X->Y且Y不属于X时,X必有码,则则称R<U,F>属于BCNF。
第四范式(4NF):关系模式R<U,F>属于1NF,如果对于R的每个平凡多值依赖X->Y(Y不包含于X),X都有码,则称R<U,F>属于4NF。
多值依赖:设R(U)是属性集U上的一个关系模式,X、Y、Z是U的子集,并且Z = U - X - Y,关系模式R(U)中多值依赖 X -> -> Y成立,当且仅当对R(U)的任意关系r,给定的一对(x,z)的值,有一组Y的值,这组值仅仅决定于x的值而与z值无关

任何一个二目关系都属于3NF、BCNF、4NF

Q22: 什么是锁

类似于操作系统中的进程调度管理,是实现并发控制的一项重要技术。数据库是一个多用户使用的共享资源,当多个用户并发的存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。所以要有个封锁机制,作为控制。
当事务对某个数据对象进行操作时,向系统发出请求,让后加锁。加锁后事务就可以对该数据进行操作,结束后,再解锁释放资源供其他事务使用。

Q23: 数据库的乐观锁和悲观锁是什么

数据库管理系统DBMS中的并发控制的任务是确保,在多个事务同时存取数据库中同一数据时,不破坏事务的隔离性和统一性以及数据库的统一性。
乐观锁和悲观锁时并发控制主要采用的技术手段。
乐观锁,即乐观并发控制锁。假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。(也就是先把资源分配出去,等操作结束后,查看是否有问题)
悲观锁,即悲观并发控制锁。假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作。

Q24: 数据表类型有哪些

MySQL支持InnoDB,GEAP,BOB,ARCHIVE,CSV等数据表类型

Q25: 优化SQL语句

SQL语句尽可能简单
不要有太多的表连接
少用子查询,嵌套查询或者视图嵌套也尽可能简单
避免扫描全表
合理使用索引,where子句
like语句也尽可能写到比较清楚,%虽然可以省略很多,但是也意味着查询的负担增加
减少 in 的使用,如between、exist
少用select * from table
中间结果可以采用临时表暂存,避免多次扫描主标,减少程序执行“共享锁”“阻塞”
尽可能使用更小的字段,节约内存,读取消耗

Q26: 数据库优化的思路

数据库结构优化
范式优化,消除冗余(节省空间)
表的拆分,使表结构不要过于复杂
索引优化
算法数据结构优化
物理优化
SQL语句优化:如上

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值