sql 删除依赖_【sql】面试题总结

c3ce60a99b582f49ff6fa60227dc0138.png

生活明朗❤️

万物可爱❤️

不念过往❤️

不惧将来❤️

f3cc28892a99e5d78ecfaba07105f983.png

考试时候,监考老师就坐我旁边,

我只是姨妈巾垫的不舒服,

偷偷拽着裤子想挪一下,

老师让我拿出来。。。

这次的话题是

数据库面试题总结

(新鲜出炉,出现率高)

???

先养眼,再看题

❤️

今天还是小姐姐

0b41fa2e52ec56bcdf9c9cf2d57c0315.png f3cc28892a99e5d78ecfaba07105f983.png

下面这些是针对这段时间的面试题来做的总结,里面的一些题大家可能有遇到过,或许有更好的答案,但重要的是题,以及各题的关联性。

[toc]

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

2,索引是什么?有什么作用以及优缺点

3,什么是事务?

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

5,索引查询一定能提升优化性能么?

6,简单说下drop,delete,truncate的区别,以及适用场景

7,什么是主键,外键

8,什么是视图,以及适用场景

9,什么是数据库三范式

9c0ef4f521ffc42e11426f2ca212fd49.png 9abe01bb11fe06eb245a9dab5f1f8693.png

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

> 存储过程就是一些预编译的sql语句。

简单的理解就是将一大串sql的集合,或者我们需要在sql语句中设置一些变量的值。然后再给这个代码块取个名字,再用到这个功能的时候再调用它就行了。

优点:

- 封装性

在存储过程被创建后,可以在程序中多次被调用,而不用多次写sql语句。

- 增强灵活性

类似于将代码的方法块进行提取,降低解耦性。

- 高性能

存储过程执行一次后,就会产生二进制代码在缓冲区,以后再调用的话,就去缓冲区中执行二进制代码,提高了效率

缺点:

- 调试

开发调试复杂,存储过程的开发要比程序复杂

- 逻辑

本身不像java是面向对象开发,而本质还是过程式语言,处理比较吃力,且业务逻辑都在存储过程中

- 缓存

没办法应用缓存。虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。 

如果对存储过程还不够了解,可以查看 公众号文章 

35f77e339d27b23755bc33dbe360305b.png 9abe01bb11fe06eb245a9dab5f1f8693.png

2,索引是什么?有什么作用和优缺点

> 索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构

简单的理解:索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

(还记得solr么?差不多的意思)

MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引

- 索引加快数据库的检索速度

- 索引降低了插入、删除、修改等维护任务的速度

- 唯一索引可以确保每一行数据的唯一性

- 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能

- 索引需要占物理和数据空间 

2d2344d2bb35ae99bcf8a6ecfeea31e4.png 9abe01bb11fe06eb245a9dab5f1f8693.png

3,什么是事务

> 事务指的是一组逻辑上的操作,组成该逻辑操作的各个逻辑单位要么全部成功,要么全部失败

- MySQL:默认开启了事务的自动提交功能,一个SQL语句就是一个事务

- Oracle:没有开启事务的自动提交功能,需要手动提交事务

(Hive没有事务,Hive的重心是海量数据存储)

特点:

1. 原子性:

    组成事务的各个逻辑单元不可分割

2. 一致性:

    事务执行前后,数据应该保持一致

3. 隔离性

    强调的是一个事务执行的时候不应该受到其它事务的影响

4. 持久性

    事务执行后,数据应该持久性的写入到数据表中 

0466a836e00716bbbe2dff9fb1562c98.png 9abe01bb11fe06eb245a9dab5f1f8693.png

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

> 数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

- 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作

- 乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。 

728ffe9e2909b07acd18cc6db9297e6d.png 9abe01bb11fe06eb245a9dab5f1f8693.png

5,索引查询一定能提升性能优化么?

> 通常,通过索引查询数据比全表扫描要快,但是我们也必须注意到它的代价。

索引需要空间来存储,也需要定期维护,每当有记录在表中增减或索引列被修改时,索引本身也会被修改。

这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O

因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢,使用索引查询不一定能提高查询性能,

索引范围查询 (INDEX RANGE SCAN)

适用于两种情况:基于一个范围的检索,一般查询返回结果集小于表中记录数的30%基于非唯一性索引的检索 

3ad8bf4308a019e563921f32ac21aaa6.png 9abe01bb11fe06eb245a9dab5f1f8693.png

6,简单说下drop,delete,truncate的区别

truncate:删除表的数据,但是表结构不变,比如id自增又从1开始。

delete:直接删除表中的所有数据;

drop:直接删除掉表;

- 相同点:

truncate和不带where的delete,以及drop都会删除表中的所有数据。

drop,truncate都是DDL(数据定义语言)执行后会自动提交

- 不同点:

truncate和delete只删除表的数据,不删除表的结构。

drop:删除表的结构,依赖约束,触发器,索引;

并且表的存储过程和函数保留,但变为invalid状态

- 速度:

一般来说:drop > truncate > delete

- 安全性:

    - 慎用drop和truncate,尤其是没有备份的情况下!

    - 在使用中,想删除部分数据要加上where子句,并且回滚段要足够大。

    - 想删除表直接drop

    - 想保留表同时删除数据,如果和事务没有关系就直接truncate。如果和事务有关,或者想出发trigger,还是delete。 

3bde4b35bcf71ae13d79591930b667e4.png 9abe01bb11fe06eb245a9dab5f1f8693.png

7,什么是主键,外键?

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

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

426db820d0274aa55171ec40c8036f74.png 9abe01bb11fe06eb245a9dab5f1f8693.png

8,什么是视图,以及适用场景

> 视图是一种虚拟的表,具有和物理表相同的功能。

可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。

对视图的修改不影响基本表。它使得我们获取数据更容易

- 相比多表查询。只暴露部分字段给访问者,所以就建一个虚表,就是视图。

- 查询的数据来源于不同的表,而查询者希望以统一的方式查询,这样也可以建立一个视图,把多个表查询结果联合起来,查询者只需要直接从视图中获取数据,不必考虑数据来源于不同表所带来的差异 

34434d98319f4513c5baf816c072ca99.png 9abe01bb11fe06eb245a9dab5f1f8693.png

9,什么是数据库三范式

第一范式

> 表中的列只能含有原子性的值,即不可再分

eg:如果有一个id对应的列的值有多个,可将多个值进行拆分。

第二范式

> 没有部分依赖

eg:如果一张表中,每个id都对应着部门的id和部门的名称。这就可以单独给将id和部门的数据拎出来成两张表,再join

第三范式

> 没有传递依赖

eg:如果一张表中,除了部门还有电话等的依赖,可全部单独拎出来,使其没有任何关系。

即各个列的数据已没有纯粹的依赖

优点:会将业务全部拆分的明确,易维护和减少空间的占用

缺点:在查询数据时,会产生很多不必要的关联,易增加查询的复杂度。并由于连接表过多,性能会降低 

数据库是三范式,数仓是反三范式,如果对存储过程还不够了解,可以我的博客,点击原文

066a5990c44d35768868c55a6018a1b9.png f3cc28892a99e5d78ecfaba07105f983.png

以上就是这段时间的面试题

我回答的也不是特别好特别理想,如果有更高的见解也欢迎提出。

aeff46e5a72581646a644a35b22ce93e.png ae24a34195025a6578a8305e10a3b5b5.png

扫码关注我

郭大熊的公众号

个人博客 : www.guodaxiong.com

如果不曾见过阳光,我本可以忍受黑暗

 Hi GuoDaXiong 

我是狗子

祝你幸福

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值