数据库面经---10则

这篇具有很好参考价值的文章主要介绍了数据库面经---10则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库范式有哪些:​​​​​​​

  1. 第一范式(1NF):
    1. 数据表中的每一列都是不可分割的原子值。
    2. 每一行数据在关系表中都有唯一标识,通常是通过主键来实现。
  2. 第二范式(2NF):
    1. 满足第一范式。
    2. 非主键列完全依赖于全部主键而不是部分主键。也就是说,非主键列不能依赖于主键中的一部分属性。
  3. 第三范式(3NF):
    1. 满足第二范式。
    2. 非主键列之间没有传递依赖关系。换句话说,如果 A→B 且 B→C,则不能有 A→C。

group by和order by

前者分组,后者排序

where和having的区别

  1. WHERE:WHERE子句通常用于SELECT、UPDATE和DELETE语句中。
    1. WHERE用于在查询之前对行进行过滤,根据指定的条件选择满足条件的行。
    2. WHERE可以使用比较运算符(如等于、大于、小于等)和逻辑运算符(如AND、OR、NOT)来构建条件。
  2. HAVING:HAVING子句通常用于SELECT语句中结合GROUP BY子句使用,用于对分组后的结果进行筛选。
    1. HAVING用于在分组聚合查询之后对结果进行过滤,根据指定的条件筛选满足条件的分组。
    2. HAVING一般用于统计函数(如SUM、COUNT、AVG)的结果上进行筛选。

存储器、视图、游标

存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合。想要实现相应的功能时,只需要调用这个存储过程就行了(类似于函数,输入具有输出参数)。

优点

  • 预先编译,而不需要每次运行时编译,提高了数据库执行效率。
  • 封装了一系列操作,对于一些数据交互比较多的操作,相比于单独执行SQL语句,可以减少网络通信量。
  • 具有可复用性,减少了数据库开发的工作量。
  • 安全性高,可以让没有权限的用户通过存储过程间接操作数据库。
  • 更易于维护。

缺点

  • 可移植性差,存储过程将应用程序绑定到了数据库上。
  • 开发调试复杂。
  • 修改复杂,需要重新编译,有时还需要更新程序中的代码以更新调用。

触发器:

触发器(TRIGGER)是由事件(比如INSERT/UPDATE/DELETE)来触发运行的操作(不能被直接调用,不能接收参数)。在数据库里以独立的对象存储,用于保证数据完整性(比如可以检验或转换数据)。

视图

从数据库的基本表中通过查询选取出来的数据组成的虚拟表(数据库中只存放视图的定义,而不存放视图的数据)。可以对其进行增/删/改/查等操作。视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变)。

可以跟基本表一样,进行增删改查操作(增删改操作有条件限制,一般视图只允许查询操作),对视图的增删改也会影响原表的数据。它就像一个窗口,透过它可以看到数据库中自己感兴趣的数据并且操作它们。

优点:

简单化,数据所见即所得

安全性,用户只能查询或修改他们所能见到得到的数据

逻辑独立性,可以屏蔽真实表结构变化带来的影响

缺点:

性能相对较差,简单的查询也会变得稍显复杂

修改不方便,特变是复杂的聚合视图基本无法修改

游标:

 用于定位在查询返回的结果集的特定行,以对特定行进行操作。使用游标可以方便地对结果集进行移动遍历,根据需要滚动或对浏览/修改任意行中的数据。主要用于交互式应用。它是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响的数据,简单来说,就是将受影响的数据暂时放到了一个内存区域的虚表当中,这个虚表就是游标。

  游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。即游标用来逐行读取结果集。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。

  游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。通俗来说,游标就是能在sql的查询结果中,显示某一行(或某多行)数据,其查询的结果不是数据表,而是已经查询出来的结果集。

内连接、外连接、左连接、右连接

内连接:

包括相等联接和自然联接。 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

外连接:

外联接可以是左向外联接、右向外联接或完整外部联接。

左连接:

左边所有数据行

右连接:

右边所有数据行

索引的数据结构

  1. B+树索引(B+ Tree Index):B+树是一种平衡多路查找树,它具有以下特点:
    1. 所有叶子节点都位于同一层,且通过指针连接。
    2. 非叶子节点不存储具体的数据,只存储索引键和指向子节点的指针。
    3. 叶子节点按照索引键的顺序存储了所有数据,并且相邻叶子节点之间有一个双向链表连接。

B+树索引适合范围查询和排序操作,可以快速定位到指定的索引键或者一个范围内的索引键。

  1. 哈希索引(Hash Index):

哈希索引是使用哈希表作为底层实现的索引结构。它通过将索引键映射为哈希桶的位置来加快查询速度。每个哈希桶中存储了符合哈希值的索引键所关联的数据位置。

哈希索引适合等值查询,可以在常数时间内精确定位到指定的索引键。然而,哈希索引不支持范围查询和排序操作,并且对于哈希冲突需要进行额外的处理。

B树和B+树是什么意思,区别在哪?

B 树的每个节点都包含数据(索引+记录),而用户的记录数据的大小很有可能远远超过了索引数据,这就需要花费更多的磁盘 I/O 操作次数来读到「有用的索引数据」。

而且,在我们查询位于底层的某个节点(比如 A 记录)过程中,「非 A 记录节点」里的记录数据会从磁盘加载到内存,但是这些记录数据是没用的,我们只是想读取这些节点的索引数据来做比较查询,而「非 A 记录节点」里的记录数据对我们是没用的,这样不仅增多磁盘 I/O 操作次数,也占用内存资源。

B+树:

B+树是在B树的基础上进行改进和优化的一种变体,它具有以下特点:

  • 所有叶子节点通过指针连接形成一个有序链表,方便范围查询。
  • 只有叶子节点存储索引键和对应的数据,非叶子节点只存储索引键,不存储数据。
  • 非叶子节点的索引键用于搜索和定位到正确的子节点。

B+ 树与 B 树差异的点,主要是以下这几点:

  • 叶子节点(最底部的节点)才会存放实际数据(索引+记录),非叶子节点只会存放索引;
  • 所有索引都会在叶子节点出现,叶子节点之间构成一个有序链表;
  • 非叶子节点的索引也会同时存在在子节点中,并且是在子节点中所有索引的最大(或最小)。
  • 非叶子节点中有多少个子节点,就有多少个索引;

聚簇索引和非聚簇索引

聚簇索引:找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以主键就是聚簇索引,修改聚簇索引其实就是修改主键。聚簇索引按照索引键的顺序对表中的数据行进行物理排序,并将数据行直接存储在叶子节点上。每张表只能有一个聚簇索引,

非聚簇索引:索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需要根据索引上的值(主键)再次回表查询,非聚簇索引也叫做辅助索引。非聚簇索引不改变表中数据行的物理存储顺序,而是在索引中存储索引键和指向对应数据行的指针。一个表可以有多个非聚簇索引。

适合/不适合创建索引的情况

  1. 频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件
  2. where条件里用不到的字段,不创建索引;
  3. 表记录太少,不需要创建索引;
  4. 数据重复且分布平均的字段,因此为经常查询的和经常排序的字段建立索引。注意某些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适。立索引。

什么时候适用索引?

  • 字段有唯一性限制的,比如商品编码;
  • 经常用于 WHERE 查询条件的字段,这样能够提高整个表的查询速度,如果查询条件不是一个字段,可以建立联合索引。
  • 经常用于 GROUP BY 和 ORDER BY 的字段,这样在查询的时候就不需要再去做一次排序了,因为我们都已经知道了建立索引之后在 B+Tree 中的记录都是排序好的。

什么时候不需要创建索引?

  • WHERE 条件,GROUP BY,ORDER BY 里用不到的字段,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的,因为索引是会占用物理空间的。
  • 字段中存在大量重复数据,不需要创建索引,比如性别字段,只有男女,
  • 表数据太少的时候,不需要创建索引;
  • 经常更新的字段不用创建索引,比如不要对电商项目的用户余额建立索引,因为索引字段频繁修改,由于要维护 B+Tree的有序性,那么就需要频繁的重建索引,这个过程是会影响数据库性能的。

事物的概念

事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。文章来源地址https://www.toymoban.com/news/detail-789025.html

到了这里,关于数据库面经---10则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Sql server 连接 Oracle数据库

    前提预警:本机必须装有Oracle客户端 检查是否安装Oracle客户端,并检查TNS信息是否配置完成 1.1、 在cmd中执行 sqlplus ,没有报错并出现Oracle版本号,则表示Oracle已安装 1.2、配置TNS信息(最上面的10.0.0.130可随意定义,eg:test、orcl、qerghasd…) 配置ODBC数据信息 2.1、打开ODBC数据

    2024年02月03日
    浏览(59)
  • oracle如何定期备份数据库sql文件

    Oracle数据库可以使用以下方法定期备份数据库的SQL文件: 使用Oracle的备份和恢复工具RMAN(Recovery Manager)进行备份。RMAN提供了全面而高效的数据库备份和恢复功能。您可以使用RMAN备份数据库的SQL文件,并将其存储在指定的位置。可以使用RMAN备份的命令来备份数据库,例如:

    2024年01月25日
    浏览(82)
  • Sql server和Oracle默认数据库

            SQL Server 和 Oracle 都有自带的一些默认数据库,保存了不同的系统信息和配置数据。         SQL Server 上的默认数据库:          master :SQL Server 引擎的系统级目录,存储了 所有系统层级的信息和元数据 ,例如登录账号信息。         tempdb:存储各种系

    2024年02月09日
    浏览(62)
  • Oracle数据库SQL Plus基础命令

    1.使用SQL*Plus登录Oracle数据库 开始 -- 所有程序 -- Oracle -- 应用程序开发 -- SQL Plus cmd窗口下输入:sqlplus 用户名/口令@主机字符串 2.使用CMD命令登录Oracle数据库 开始 -- 所有程序 -- 附件 -- 命令提示符 使用命令行登陆的连接命令格式为:sqlplus/@net_service_name username为用户名;passw

    2024年02月06日
    浏览(54)
  • DB(一):数据库概述、SQL概述、Oracle数据类型

    包括Oracle、DB2、SQL Server、MySQL数据库概述;数据定义语言DDL、数据操作语言DML、事务控制语言TCL、数据查询语言DQL、数据控制语言DCL语言介绍;NUMBER 、CHAR、VARCHAR2、DATE数据库类型;CHAR和VARCHAR2的存储编码、CHAR和VARCHAR2的最大长度、LONG和CLOB类型。 1、DB和DBMS (1)、数据库(

    2024年02月09日
    浏览(82)
  • 主流数据库(SQL Server、Mysql、Oracle)通过sql实现多行数据合为一行

    1、方法一:使用 STUFF 和 FOR XML PATH 进行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一种功能,允许您将查询结果转换为 XML 格式。 PATH 模式则是其中一种灵活的方式来构造自定义的XML结构。 1、基本字符串连接 : 当您想从单列中提取所有行的数据并连接成一

    2024年04月10日
    浏览(63)
  • ORACLE数据库 —— PL/SQL知识点2

    ORACLE数据库  PL/SQL语句基础知识点  适合有SQL基础的人群。  禁止转载! 内置函数 字符串函数     lower(列名|字符串)函数用于返回字符串的小写形式。         eg.SELECT ename,sal FROM emp WHERE ename=lower(\\\'ename\\\');     upper(列名|字符串)函数用于返回字符串的大写形式。       

    2024年02月08日
    浏览(52)
  • Oracle/PL/SQL数据库基础操作(持续更新)

            PL/SQL不是一个独立的编程语言;它是Oracle编程环境中的工具。 SQL* Plus是一个互动的工具,它可以在命令提示符下键入SQL和PL/SQL语句。这些命令发送到数据库进行处理。语句处理之后将结果发回,并在屏幕上显示出来。 分类 命令 DDL create:创建;drop:删除;alter:

    2024年02月09日
    浏览(63)
  • SQL Developer的下载、安装和连接Oracle数据库

    SQL Developer–Oracle常用管理工具。 如需SQL Developer安装包可以下方留言。 该软件不需要安装,下载解压后 双击sqldeveloper.exe即可运行 。 第一次运行需要输入JDK路径。 【若没下载或不清楚是否已经下载JDK,指路下载、安装JDK并检测JDK是否安装成功】 SQL Developer是图形界面查询工

    2024年02月07日
    浏览(66)
  • SQL SERVER连接oracle数据库几种方法

    --1 方式  --查询oracle数据库中的表  举一反三:在查询分析器中输入: --在sqlserver中创建与oracle数据库中的表同名的表  --2、方式  --在master数据库中查看已经存在的链接服务器  --要在企业管理器内指定登录帐号 --备注:引用ORACLE服务器上的表时,用户名称与表名一定要大写

    2024年02月02日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包