20道数据库面试题

1.什么是封锁?封锁的基本类型有哪几种?含义是什么?

所谓封锁就是当一个事务在对某个数据对象(可以是数据项、记录、数据集、以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。

基本的封锁类型有两种:排它锁和共享锁

(1)排它锁:排它锁又称写锁,简称为X锁,其采用的原理是禁止并发操作。 

(2)共享锁:共享锁又称读锁,,简称为S锁,其采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。

2. sql数据库里锁是什么以及分类介绍

目前的C/S,B/S结构都是多用户访问数据库,每个时间点会有成千上万个user来访问DB,其中也会同时存取同一份数据,会造成数据的不一致性或者读脏数据
数据库必须有锁的机制来确保数据的完整和一致性
锁的类型003A
(1) 共享锁:
共享锁用于所有的只读数据操作.
(2) 修改锁:
修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象
(3) 独占锁:
独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。独占锁不能和其他锁兼容。
(4) 架构锁
结构锁分为结构修改锁(Sch-M)和结构稳定锁(Sch-S)。执行表定义语言操作时,SQLServer采用Sch-M锁,编译查询时,SQLServer采用Sch-S锁。
(5) 意向锁
意向锁说明SQL Server有在资源的低层获得共享锁或独占锁的意向。
(6) 批量修改锁
批量复制数据时使用批量修改锁

3. 什么是死锁?产生死锁的必要条件。

1)在同时处于等待状态的两个或多个事务中,每个事务都在等待其中另一个事务解除封锁,它才能继续执行下去,结果造成任何一个事务都无法继续执行,这种状态称为死锁

2)发生死锁的必要条件有以下四条:

(1)互斥条件:一个数据对象一次只能被一个事务所使用,即对数据的封锁采用排它式;

(2)不可抢占条件:一个数据对象只能被占有它的事务所释放,而不能被别的事务强行抢占

(3)互斥条件:一个数据对象一次只能被一个事务所使用,即对数据的封锁用排它式; 

(4)不可抢占条件:一个数据对象只能被占有它的事务所释放,而不能被别的事务强行抢占

4.游标的含义及分类?

含义:游标是一种处理数据的方法,主要用于存储过程、触发器和Transact-SQL脚本中,在查看或处理结果集中的数据时,游标可以提供在结果集中向前或向后浏览数据的功能。

分类:Transact-SQL游标、应用程序编程接口(API)服务器游标、客户端游标

5.使用游标的基本步骤有哪些?

1.声明游标2.打开游标3.读取游标中的数据4.关闭游标5.释放游标

6.什么是事务的4个基本属性:

(ACID)原子性、一致性、隔离性、持久性。

7. SQL中有几种事务各有什么特点:

4种,

自动提交事务特点:每条单独语句都是一个事务。

隐式事务特点:前一个事务完成时新事务隐式启动,每个事务仍以COMMIT或ROLLBACK语句、显示结束。

显示事务特点:每个事务均已BEGIN TRANSACTION语句显示开始,以COMMIT或ROLLBACK语句显示结束。

分布式事务特点:跨越多个服务器的事务

8.简述什么是批处理及其特点?

一组单条或者多条T-SQL语句,为一个整体目标同时执行。批处理可以节省系统开销。GO命令表示批处理结束,如果脚本中没有GO命令,作为单个批处理执行

9.存储过程的优缺点

优点: 1)存储过程是预编译过的,执行效率高。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 3)安全性高,执行存储过程需要有一定权限的用户。 4)存储过程可以重复使用,可减少数据库开发人员的工作量。 缺点:移植性差

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

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

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

第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上

12.Oracle和Mysql的区别?

1)库函数不同。 2)Oracle是用表空间来管理的,Mysql不是。 3)显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同。 4)分页查询时候时候,mysql用limit oracle用rownum

13.order by和groupby 的区别

order by 排序查询、asc升序、desc降序 group by分组查询、having 只能用于groupby子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

14.什么是内连接,左外连接,右外连接?

内联接(Inner Join):匹配2张表中相关联的记录。

左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。

右外联接(Right Outer Join):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示。

在判定左表和右表时,要根据表名出现在Outer Join的左右位置关系。

15. 触发器的作用?

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

16. 如何维护数据库的完整性和一致性?

尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

17.Delete、truncaate、drop都是删除语句,它们有什么分别?

1).delete 属于DML语句,删除数据,保留表结构,需要commit,可以回滚,如果数据量大,很慢。

2).truncate 属于DDL语句,删除所有数据,保留表结构,自动commit,不可以回滚,一次全部删除所有数据,速度相对较快。

3).Drop属于 DDL语句,删除数据和表结构,不需要commit,删除速度最快。

18. 序列的作用

Oracle使用序列来生成唯一编号,用来处理一个表中自增字段。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。

19. 什么是内存泄漏?

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

20. 什么是回滚?
    为了保证在应用程序、数据库或系统出现错误后,数据库能够被还原,以保证数据库的完整性 ,所以需要进行回滚。回滚(rollback)就是在事务提交之前将数据库数据恢复到事务修改之前数据库数据状态。

猜你喜欢

转载自blog.csdn.net/qq_41410358/article/details/80463060