MySQL面试题入门:四大范式、SQL生命周期、SQL六大语言、索引、最左匹配原则....

1、数据库四大范式?

第一范式:属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)

第二范式:满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)

第三范式:满足第二范式;且不存在传递依赖,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C)

BCNF(BC范式) 它构建在第三范式的基础上,如果关系模型R是第一范式,且每个属性都不传递依赖于R的候选键 (其他非主键字段),那么称R为BCNF的模式

  • 1NF: 字段是最小的的单元不可再分
  • 2NF:满足1NF,表中的字段必须完全依赖于全部主键而非部分主键 (一般我们都会做到)
  • 3NF:满足2NF,非主键外的所有字段必须互不依赖
  • 4NF:满足3NF,消除表中的多值依赖

PS:
满足BCNF的关系模式,肯定也满足3NF;同理,满足3NF的关系模式,肯定也满足2NF

2、SQL生命周期?

  1. 应用服务器与数据库服务器建立一个连接
  2. 数据库进程拿到SQL请求
  3. 解析并生成执行计划执行
  4. 读取数据到内存并进行逻辑处理
  5. 通过步骤一的连接,发送结果到客户端
  6. 关闭连接,释放资源。

3、SQL六种语言?

3.1.数据库定义语言 DDL (Data Definition Language)

面向的对象: 数据库 和 表(逻辑结构、表结构、视图、索引)

关键字: create、alter、drop、truncate(删除当前表再新建一个相同的表)

3.2. 数据库查询语言 DQL (Data Query Language)

面向的对象: 表、字段

语句顺序:select (distinct)…from…join…on…where…group by…having…order by…limit

执行顺序:from…on…join…where…group by…having…select(distinct)…order by…limit

where和having的区别:

1.WHERE子句用来筛选 FROM 子句中指定的操作所产生的行,在执行分组之前进行应用;GROUP BY子句用来分组 WHERE 子句的输出;HAVING子句用来从分组的结果中筛选行,在执行分组之后进行应用。

2.where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以。

3.where可以用于select、update、delete和insert语句中;having只能用于select语句中

3.3. 数据库操纵语言 DML (Data Manipulation Language)

面向的对象: 记录(行)

关键字: insert、update、delete

注意:
开发中很少使用delete,删除有物理删除逻辑删除,其中逻辑删除可以通过给表添加一个字段(isDel),若值为1,代表删除;若值为0,代表没有删除。

此时,对数据的删除操作就变成了update操作了。

truncate和delete的区别:
truncate是删除表,再重新创建这个表。属于DDLdelete是一条一条删除表中的数据,属于DML。

3.4. 数据库控制功能 DCL (Data Control Language)

面向的对象: 用户、权限、事务。

关键字: grant,revoke

3.5、事务处理语言 DPL

事务处理语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION、COMMIT和ROLLBACK。

3.6、指针控制语言 CCL

它的语句,像DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

4、索引?

4.1什么是索引?

  • 官方介绍索引是帮助MySQL高效获取数据数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度
  • 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。
  • 我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。**

4.2索引类型?

  1. 主键索引

     索引列中的值必须是唯一的,`不允许有空值`。
    
  2. 普通索引

     MySQL中基本索引类型,没有什么限制,`允许`在定义索引的列中`插入重复值和空值。`
    
  3. 全文索引

     只能在文本类型CHAR,VARCHAR, TEXT 类型字段上创建全文索引。字段长度比较大时,如果创建普通索引,
     在进行like模糊查询时效率比较低,这时可以创建全文索引。 MyISAM和InnoDB中都可以使用全文索引。
    
  4. 唯一索引

    索引列中的值必须是`唯一`的,但是`允许为空值`。
    
  5. 空间索引

     MySQL在5.7之后的版本支持了空间索引,而且支持`OpenGIS`几何数据模型。
     MySQL在空间索引这方面遵循OpenGIS几何数据模型规则。
    
  6. 前缀索引

    在文本类型如CHAR,VARCHAR,TEXT类列上创建索引时,可以指定索引列的长度,但是数值类型不能指定。
    
  7. 其他(按照索引列数量分类)

    1. 单列索引

    2. 组合索引: 组合索引的使用,需要遵循最左前缀匹配原则(最左匹配原则) 。一般情况下在条件允许的情况下使用组合索引替代多个单列索引使用。

4.3索引的优势和劣势?

4.3.1优势
  • 可以提高数据检索的效率,降低数据库的IO成本,类似于书的目录。
  • 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。
    • 被索引的列会自动进行排序,包括【单列索引】和【组合索引】,只是组合索引的排序要复杂一些。
    • 如果按照索引列的顺序进行排序,对应order by语句来说,效率就会提高很多
4.3.2劣势
  • 索引会占据磁盘空间
  • 索引虽然会提高查询效率,但是会降低更新表的效率
    • 比如每次对表进行增删改操作,MySQL不仅要保存数据,还有保存或者更新对应的索引文件。

5、最左匹配原则?

过滤条件要使用索引必须按照索引建立时的顺序,依次满足,一旦跳过某个字段,索引后面的字段都无法使用。

(>、<、between、like)都会停止匹配。

ps:创建的索引列都存在,Mysql的优化器会自动给你排序。

6、哪些情况不要创建索引?

  1. 表记录太少

     300w数据时MySQL性能就开始下降了,这时就可以开始优化了。
    
  2. 经常增删改的表

     提高了查询速度,同时却会降低更新表速度,如对标进行INSRERT、UPDATE、DELETE
     因为更新表时,MySQL不仅要保存数据还要保存一下索引文件
    
  3. where条件里用不到的字段不创建索引

7、为什么索引后查询效率高呢?

这个就涉及到索引数据结构了,类比书籍的目录页,索引通过B+树的结构存放数据,横向数据多,纵向的高低越低,和磁盘交互就越少,查询得速度就越快。

8、MySQL有关权限表都有哪些?

  • user:用户账号、全局权限
  • db:库级别权限
  • host:废弃
  • tables_priv:表级别权限
  • colums_priv:列级别权限
  • procs_priv:存储过程和存储函数相关的权限
  • proxies_priv:代理用户权限

9、事务的ACID?

  1. 原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

  2. 一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
    因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。

    如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。

  3. 隔离性(Isolation):一个事务的执行不能对其它事务形成干扰。 即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

  4. 持续性(Durability):也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。 接下来的其它操作或故障不应该对其执行结果有任何影响。

10、索引的数据结构?

  • Hash表
  • 二叉查找树
  • 平衡二叉树
  • B树:改造二叉树
  • B+树:改造B树

你知道的越多,你不知道的就越多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/584085.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

品深茶的抗癌效果怎么样?

茶叶中的一些成分&#xff0c;如茶多酚、儿茶素等&#xff0c;具有抗氧化和抗炎作用&#xff0c;这些作用在一定程度上可以抑制癌细胞的生长和扩散。 然而&#xff0c;这些成分在茶叶中的含量和生物利用率会受到多种因素的影响&#xff0c;如茶叶的品种、制作工艺、饮茶方式等…

【Redis 开发】Lua语言

Lua Lua语法 Lua语法 Lua是一种小巧的脚本语言&#xff0c;底层用C语言实现&#xff0c;为了嵌入式应用程序中 官网&#xff1a;https://www.lua.org/ 创建lua文件 touch hello.lua 运行lua文件 lua hello.lua 输出语句 print("Hello World!")数据类型 可以通过t…

idea常用知识点随记

idea常用知识点随记 1. 打开idea隐藏的commit窗口2. idea中拉取Git分支代码3. idea提示代码报错&#xff0c;项目编译没有报错4. idea中实体类自动生成序列号5. idea隐藏当前分支未commit代码6. idea拉取新建分支的方法 1. 打开idea隐藏的commit窗口 idea左上角File→Settings…

java连锁美业收银系统源码-美业SaaS系统【微信小程序端】功能及应用场景介绍

博弈美业管理系统源码 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 &#xff08; 需要系统演示视频可联系观看 &#xff09; ▶ 顾客微信小程序端&#xff1a; 场景名称 场…

React配置@别名路径配置

1. 背景知识 路径解析配置&#xff08;webpack&#xff09;&#xff0c;把 / 解析为 src/路径联想配置&#xff08;VsCode&#xff09;&#xff0c;VsCode 在输入 / 时&#xff0c;自动联想出来对应的 src/下的子级目录 2. 路径解析配置 配置步骤&#xff1a; 安装craco npm …

利用Seaborn实现高级统计图表—python可视化

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用 Seaborn 实现高级统计图表 在数据可视化领域&#xff0c;Seaborn 是 Python 中一个备…

ArcGIS小技巧—坐标系匹配

坐标系&#xff1a;&#xff08;Coordinate System&#xff09;&#xff1a;在一些书籍和软件中也叫做空间参考&#xff0c;简单来说&#xff0c;有了坐标系&#xff0c;我们才能够用一个或多个“坐标值”来表达和确定空间位置。没有坐标系&#xff0c;坐标值就无从谈起&#x…

c#数据库:1.c#创建并连接数据库

安装软件:SQL Server Management Studio Management Studio Visual Studio 2022 启动服务: 打开SQL Server Management Studio Management Studio ,连接到服务器(GUANZU是我的计算机名) 新建数据库,随便起个名字叫aq: c#代码: using System; using System.Collections.Gener…

Detla lake with Java--在spark集群上运行程序

昨天写了第一篇入门&#xff0c;今天看见有人收藏&#xff0c;继续努力学习下去。今天要实现的内容是如何将昨天的HelloDetlaLake 在spark集群上运行&#xff0c;。具体步骤如下 1、安装spark,我使用的是 spark-3.5.1-bin-hadoop3-scala2.13&#xff0c;去官网下载&#xff0c…

C++ 如何实现原子性

1.操作系统如何实现原子性 在单处理器,单核,运行多线程的情况下,我们不使用线程同步工具, 我们会出现,线程之间会互相抢夺,临界区的资源,造成数据不符合我们预期的结果, 后面再说解决办法,那么我们怎么帮助实现原子性 1 屏蔽中断,不让线程之间切换,让它完成再切换 2 底层硬…

Android CalendarView助你打造精美的Android日历应用

Android CalendarView助你打造精美的Android日历应用 1. 引言 移动应用中的日历功能对于用户来说至关重要&#xff0c;它不仅是时间管理的工具&#xff0c;还能帮助用户记录重要事件和安排活动。因此&#xff0c;一个高效、易用的日历控件对于移动应用的成功至关重要。 传统…

PaddlePaddle与OpenMMLab

产品全景_飞桨产品-飞桨PaddlePaddle OpenMMLab算法应用平台

windows平台安装labelme

之前写过一篇文章也是关于在windows平台安装labelme的&#xff1a;《windows平台python版labelme安装与使用_labelme下载-CSDN博客》&#xff0c;随着软件与工具的更新换代&#xff0c;按照同样的方法最近在使用的时候出现了错误&#xff0c;出现创建虚拟环境失败&#xff0c;具…

运维的利器–监控–zabbix–第二步:建设–部署zabbix agent--windows server系统--agent客户端安装部署

第一步&#xff1a;下载windows agent软件 第一点&#xff1a;zabbix官网针对linux和window系统有两种不同的安装方式&#xff0c;其中&#xff1a;windows为tar压缩包&#xff0c;根据你zabbix server安装的版本&#xff0c;在官网下载同样版本的agent软件。 amd64&#xff…

漂亮自适应APP下载页源码

漂亮自适应APP下载页源码,源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 漂亮自适应APP下载页源码

公链系统开发全指南: 从规划到实施

在区块链技术的迅速发展和应用推广下&#xff0c;公链系统的开发成为了当前数字资产领域的热门话题。从规划到实施&#xff0c;公链系统的开发过程需要经历多个步骤&#xff0c;下文将详细介绍每个步骤。 第一步: 规划和设计 市场调研: 分析市场需求和竞争情况&#xff0c;确定…

preg_match详解(反向引用和捕获组)

在讲preg_match函数之前&#xff0c;我们先了解一下什么是php可变变量 php可变变量 在PHP中双引号包裹的字符串中可以解析变量&#xff0c;而单引号则不行 也就是在php中&#xff0c;双引号里面如果包含有变量&#xff0c;php解释器会将其替换为变量解释后的结果&#xff1b…

数据结构-链表练习(面试题)

1&#xff0c;翻转一个单链表 建立变量cur指向第二个节点&#xff0c;curN指向cur.next&#xff0c;将第二个节点的next改为head&#xff0c;headcur这样实现&#xff0c;前两个节点顺序的翻转&#xff0c;第二个节点指向了第一个节点&#xff0c;之后cur向后移&#xff08;cu…

Git中单独的功能特性分支是什么含义

在Git中&#xff0c;一个"功能特性分支"&#xff08;通常简称为“特性分支”&#xff09;是指从主开发分支&#xff08;比如main或master&#xff09;独立出来的分支&#xff0c;专门用于开发一个新功能、修复一个bug&#xff0c;或者进行实验性的尝试。使用特性分支…

多用户商城思维导图

订单优惠逻辑计算 以上是下面功能结构图中的部分流程&#xff1a;
最新文章