面试题首页 > 数据库面试题

数据库面试题

001数据、数据库、数据库管理系统和数据库系统概念?

数据:是数据库中存储的基本对象,在计算机中的概念是广义的,描述事物的符号记录称为数据,比如你手机里的音乐、文档和图形都是数据。
数据库:数据库(Database,DB),简单的来讲就是存放数据的仓库,严格来讲,是长期存储在计算机内,有组织、可共享的大量数据集合。
数据库管理系统:数据库管理系统(Database Management System,DBMS)是位于用户与操作系统之间的一层数据管理软件,用来定义数据,管理数据。
数据库系统:数据库系统由数据、数据库、数据库管理系统(及其开发应用工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统,人们通常把它简称为数据库。

002数据模型的分类有哪些?

物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存储方法,是面向计算机系统的。
概念模型实际上是现实世界到机器世界的一个中间层次,用于信息世界的建模,是现实世界到信息世界的第一层抽象。
逻辑模型是按计算机系统的观点对数据建模,主要用于数据库管理系统的实现。常用的逻辑模型主要有层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型和半结构化数据模型。

003概念模型中有一些基本术语。

004简述关系型与非关系型数据库的区别?

关系型数据库是依据关系模型来创建的数据库,所谓关系模型就是“一对一”、“一对多”、“对多对”等。常见的关系型数据库有Oracle、MySQL、SQL Server等。
非关系型数据库主要基于“非关系型模型”,其中非关系型模型有:列模型、键值对模型、文档类模型。比如redis属于键值对模型。

005关系型数据库的优点和缺点?

优点
易于维护:都是使用表结构,格式一致。
使用方便:SQL语言通用,可用于复杂查询。
复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点
读写性能比较差,尤其是海量数据的高效率读写。
固定的表结构,灵活度稍欠。
高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

006非关系型数据库的优点和缺点?

优点
格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
速度快:nosql可使用硬盘或者随机存储器作为载体,关系型数据库只能使用硬盘。
高拓展性
成本低:nosql数据库部署简单,基本都是开源软件。
缺点
不提供sql支持,学习和使用成本较高。
无事务处理。
数据结构相对复杂,复杂查询方面稍欠。

007E-R模型是什么?

E-R模型是使用E-R图来描述现实世界的概念模型,是描述概念模型的有力工具。

008两个实体之间的关系?

● 1对1(1:1),比如一个客户只有一个会员卡,一个会员卡属于一个客户
● 1对多(1:n),比如一个系有多个班级,一个班级属于一个系
● 多对多(n:m) ,比如一个学生可以选修多门课程,一门课程可以支持多名同学参加

009数据库设计三范式?

第一范式:每个表都应该有主键,并且每个字段要求原子性不可再分。
如以下表存在可再分项(高级职称),所以不满足第一范式。

第二范式:建立在第一范式基础之上,所有非主键字段必须完全依赖主键,不能产生部分依赖。
举例如关系模型(职工号,姓名,职称,项目号,项目名称)中,职工号->姓名,职工号->职称,而项目号->项目名称。显然依赖关系不满足第二范式,常用的解决办法是差分表格,比如拆分为职工信息表和项目信息表。
第三范式:建立在第二范式基础之上,所有非主键字段必须直接依赖主键,不能产生传递依赖。
比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)。我们应该拆开来,如下:(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)
设计范式的最终目的是:减少数据的冗余。但在实际的开发中,我们以满足客户的需求为目的,有的时候也会拿冗余来换取速度。(建议把这句话说上,体现工作经验)

010MySQL和Oracle的区别?

1)MySQL是一个轻量级的关系型数据库(开源),Oracle是一个重量级的关系型数据库(收费)
2) MySQL支持自增主键(auto increment),而Oracle支持序列
3)MySQL占内存小,Oracle占内存大
4)MySQL字符串用双引号,Oracle用单引号
5)MySQL分页用limit,Oacle使用rownum表名位置,而且只能用小于
6)MySQL用0、1判断真假,Oracle用true、false
7)MySQL的事务级别是repeatable read,oracle的事务隔离性是read committed

011左连接、右连接、笛卡尔积、全连接和内连接的区别?

● 左连接(左外连接):以左表作为基准进行查询,左表数据会全部显示出来,右表如果和左表数据不匹配则显示为null。
● 右连接(右外连接):以右表作为基准进行查询,右表数据会全部显示出来,左表如果和右表的数据不匹配则显示为null。
● 全连接:先以左表进行左外连接,再以右表进行右外连接。
● 内连接:显示表之间有连接匹配的所有行。
● 笛卡尔积也叫交叉连接

012SQL语言包括哪些类型?

数据定义:Create Table,Alter Table,Drop/Truncate Table, Create/Drop Index
数据操纵:Select ,Insert,Update,Delete
数据控制:Grant,Revoke

013SQL 约束有哪几种?

NOT NULL: 用于控制字段的内容一定不能为空(NULL)。
UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束。
PRIMARY KEY: 也是用于控件字段内容不能重复,但它在一个表只允许出现一个。
FOREIGN KEY: 用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
CHECK: 用于控制字段的值范围。

014事务的概念?

事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典的例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。

015事务的特征?

数据库事务transanction正确执行的四个基本要素。ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability)。
● 原子性:事务是最小的执行单位,不允许分割。整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
● 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
● 隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
● 持久性:在事务完成以后,该事务对数据库中数据的改变是持久的。即使数据库发生故障也不应该对其有任何影响。

016事务的隔离级别?

数据库的隔离级别越高,并发性就越差,性能就越低。
oracle的隔离级别默认是READ COMMITED
mysql的隔离级别默认是REPEATABLE READ,mysql下的事务默认是自动提交的。

读未提交:事务A在事务B未提交前读取数据,如果事务B撤销了修改,那么A会读取到脏数据。因为事务B提交前的数据在缓存中
读已提交:事务A分别在事务B提交前和提交后读取数据,出现不可重复读。因为事务B提交前的数据在缓存,事务B提交后的数据在硬盘,而事务A一直读取的都是硬盘的数据从而导致不能够重复读的问题。
可重复读:事务A在事务B添加一条数据提交后,事务A读取记录数的时候不一致出现幻读。不可重复读的重点在于Update和Delete,而幻读在于Insert。

017并发事务带来的问题?

在典型的应用程序中,如果多个事务并发运行可能会导致以下的问题。

在不同的隔离级别下,V值分别如下:

  读未提交  读已提交  可重复读  串行化
V1 2 1 1 1
V2 2 2 1 1
V3 2 2 2 2

与标准的SQL隔离级别不同的是,InnoDB在可重复读级别下,利用Next-Key Lock解决了幻读问题,能够完全保证事务的隔离性,达到了串行化级别。

018索引的优缺点,什么时候使用索引,什么时候不能使用索引

索引最大的好处是提高查询速度, 
缺点是更新数据时效率低,因为要同时更新索引 
对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。

019简述什么是聚簇索引与非聚簇索引?

聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据。
非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,MyISAM通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因。

020主键索引是聚集索引还是非聚集索引?

1.聚集索引决定了数据库的物理存储结构,而主键只是确定表格逻辑组织方式。这两者不可混淆!
2.在InnoDB下主键索引是聚集索引,在MyISAM下主键索引是非聚集索引。

021存储过程和函数的区别?

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

022什么是存储过程?有哪些优缺点?

存储过程,就是一些编译好了的SQL语句,这些SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后给这些代码块取一个名字,在用到这个功能的时候调用即可。
优点:存储过程是一个预编译的代码块,执行效率比较高;存储过程在服务器端运行,减少客户端的压力;允许模块化程序设计,只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用;一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率;可以一定程度上确保数据安全。
缺点:调试麻烦、可移植性不灵活、重新编译问题.

023什么是触发器?触发器的使用场景有哪些?

1)触发器,指一段代码,当触发某个事件时,自动执行这些代码。
2)使用场景:可以通过数据库中的相关表实现级联更改;实时监控某张表中的某个字段的更改而需要做出相应的处理。

024什么叫视图?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

025什么是游标?

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

026视图的作用?以及视图可以更新数据吗?

1)使用视图可以简化复杂的sql操作,隐藏具体的细节,保护数据;
2)视图不能被索引,也不能有关联的触发器或默认值,如果视图本身内有order by则对视图再次order by将被覆盖。对于某些视图,例如,未使用联结子查询分组聚集函数Distinct Union等,是可以对其更新的,对视图的更新将对基表进行更新;但是视图主要用于简化检索,保护数据,并不用于更新,而且大部分视图都不可以更新。

027什么是数据库连接池?为什么需要数据库连接池呢?

数据库连接是一种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序 的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了 这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

目录

返回顶部