数据库面试题(全面整理版)

0.什么是事务?

事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

1.事务的四大特性?

原子性:要么都执行,要么都不执行
隔离性:所有操作全部执行完以前其它会话不能看到过程,允许多个用户并发访问。
一致性:事务前后,数据总额一致
持久性:一旦事务提交,对数据的改变就是永久的

2.事务的隔离级别?

1、未提交读:读数据时不会检查使用任何锁。
2、已提交读:只读取提交的数据并等待其他事务释放锁。
3、可重复读:会保持共享锁到事务结束。
4、可序列化:不仅会锁定影响的数据,还会锁定这个范围

脏读:事务B读取事务A还没有提交的数据
不可重复读:两次事务读的数据不一致
幻读:事务A修改了数据,事务B也修改了数据,这时在事务A看来,明明修改了数据,咋不一样

3.关系型数据库和非关系型数据库区别?

关系型数据库
优点
1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;
3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
4、支持SQL,可用于复杂的查询。
5.支持事务
缺点
1、为了维护一致性所付出的巨大代价就是其读写性能比较差;
2、固定的表结构;
3、不支持高并发读写需求;
4、不支持海量数据的高效率读写

非关系型数据库
1、使用键值对存储数据;
2、分布式;
优点
无需经过sql层的解析,读写性能很高
基于键值对,数据没有耦合性,容易扩展
存储数据的格式:nosql的存储格式是key,value形式
缺点
不支持事务
不提供sql支持

4.数据库的悲观锁和乐观锁是什么?

数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。
乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

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

超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。

候选键:是最小超键,即没有冗余元素的超键。

主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

外键:在一个表中存在的另一个表的主键称此表的外键。

6.drop、truncate和delete的区别?

drop语句删除表结构及所有数据,并将表所占用的空间全部释放。
truncatedelete只删除数据drop则删除整个表(结构和数据
在删除速度上,一般来说,drop> truncate > delete

7.数据库三范式是什么?

第一范式:只要是关系型数据库的表,都满足第一范式。
性质:第一范式的数据表中的所有字段都是单一属性,不可分割。
第二范式:不可使用组合键,确保唯一主键,基于第一范式。
第三范式:要求数据表中不存在非关键字段对任一候选关键字段的传递函数依赖,表分开,基于第二范式。

8.触发器的作用?

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

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

索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

10.什么是视图?

视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
如下两种场景一般会使用到视图:
(1)不希望访问者获取整个表的信息,只暴露部分字段给访问者,所以就建一个虚表,就是视图
(2)查询的数据来源于不同的表,而查询者希望以统一的方式查询,这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据来源于不同表所带来的差异。
注:这个视图是在数据库中创建的 而不是用代码创建的。

11.SQL 约束有哪几种?

NOT NULL: 用于控制字段的内容一定不能为空(NULL)。 

UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束。

PRIMARY KEY: 也是用于控件字段内容不能重复,但它在一个表只允许出现一个。

FOREIGN KEY: 用于预防破坏表之间连接的动作,也能防止非法数据插入外键列
             因为它必须是它指向的那个表中的值之一。

CHECK: 用于控制字段的值范围。

DEFAULT: 用于设置新记录的默认值。

12.通过JDBC访问数据库包含下面哪几步?

 1. 加载JDBC驱动程序:
 2. 提供JDBC连接的URL   
 3. 创建数据库的连接   
 4. 创建一个Statement   
 5. 执行SQL语句   
 6. 处理结果   
 7. 关闭JDBC对象

13.游标的含义及分类?

含义:游标是一种处理数据的方法,主要用于存储过程、触发器和Transact-SQL脚本中,在查看或处理结果集中的数据时,游标可以提供在结果集中向前或向后浏览数据的功能。
分类:Transact-SQL游标、应用程序编程接口(API)服务器游标、客户端游标

14.热备份和冷备份的区别:

1.冷备份是发生在数据库正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将要害性文件拷贝到另一个位置的一种说法。
2.热备份是在数据库运行的情况下,采用archivelog mode方式来备份数据库的方法。

15.什么是内存泄漏?

一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

猜你喜欢

转载自blog.csdn.net/xiayubao7788/article/details/90764127