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

这篇具有很好参考价值的文章主要介绍了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树

你知道的越多,你不知道的就越多文章来源地址https://www.toymoban.com/news/detail-858560.html

到了这里,关于MySQL面试题入门:四大范式、SQL生命周期、SQL六大语言、索引、最左匹配原则....的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【慢SQL性能优化】 一条SQL的生命周期

    一张简单的图说明下,MySQL架构有哪些组件和组建间关系,接下来给大家用SQL语句分析 例如如下SQL语句 其中 name 为索引,我们按照 时间顺序 来分析一下 客户端:如MySQL命令行工具、Navicat、DBeaver或其他应用程序发送SQL查询到MySQL服务器。 连接器:负责与客户端建立连接、管

    2024年02月05日
    浏览(40)
  • 前端面试题——详解VUE的生命周期

    前端面试时,很多面试官都会问这样一道题,“学习过vue吗,了解VUE的生命周期吗”,因为vue它是现在前端用的最多的一个框架,想要找前端工作的朋友们还是有必要掌握一下vue的生命周期以及每个周期的作用。下面给大家详解一下vue的生命周期,也欢迎大家对其进行补充!

    2024年02月15日
    浏览(43)
  • 每天一道面试题:Spring的Bean生命周期

    Spring的Bean生命周期包括以下步骤: 1、 实例化(Instantiation) :当Spring容器接收到创建Bean的请求时,它会先实例化Bean对象。这个过程可以通过构造函数、工厂方法或者反序列化等方式完成; 2、 属性赋值(Populate Properties) :在实例化Bean对象后,Spring容器会通过setter方法或

    2024年02月08日
    浏览(52)
  • 面试题-React(六):React组件和生命周期

    一、React组件 React组件简介: React组件是构建用户界面的基本单元。它们将界面拆分成独立、可重用的部分,使得代码更加模块化、可维护性更高。React组件可以是函数组件或类组件,它们接收输入的数据(称为props)并返回表示用户界面的React元素。 创建React组件: 在React中

    2024年02月11日
    浏览(33)
  • vue2面试题:对vue生命周期的理解

    生命周期(life cycle)的概念应用很广泛,在政治、经济、环境、技术、社会等诸多领域都会经常出现,可通俗理解为“从摇篮到坟墓”的整个过程,在vue中从实例的创建到销毁过程就是生命周期,即从创建、初始化数据、编译模板、挂载Dom–渲染、更新–渲染、卸载等一系列

    2024年01月25日
    浏览(53)
  • Vue快速入门,常用指令,生命周期

    Vue常用指令  案例:   Vue生命周期    

    2024年02月03日
    浏览(51)
  • 一文读懂 Spring Bean 的生命周期,unity高级工程师面试题

    实例化 该对象不再被使用时通过垃圾回收机制进行回收 而对于 Spring Bean 的生命周期来说: 实例化 Instantiation 属性赋值 Populate 初始化 Initialization 销毁 Destruction 实例化 - 属性赋值 - 初始化 - 销毁 只有四个步骤,这样拆解的话是不是感觉也不难?不像其他人写的那样直接一上

    2024年04月09日
    浏览(45)
  • Vue生命周期;综合案例;工程化开发入门

    思考: 什么时候可以发送初始化渲染请求?(越早越好:最早可以早到什么时候?) 什么时候可以开始 操作dom ?(至少dom得渲染出来) Vue生命周期 :一个Vue实例从***创建***到***销毁***的整个过程 new Vue( ) ①创建(生命就开始了)→②挂载→③更新→④销毁(比如网页被关

    2024年01月23日
    浏览(48)
  • vue2 生命周期,工程化开发入门

    1.生命周期 生命周期介绍 生命周期的四个阶段 生命周期钩子 声明周期案例 2.工程化开发入门 工程化开发和脚手架 项目运行流程 组件化 组件注册 思考:什么时候可以发送初始化渲染请求?(越早越好)什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期:就是一

    2024年02月11日
    浏览(62)
  • Android入门教程之Activity(生命周期,启动...)

    Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。 Activity 1. Activity 的使用 我们新建

    2024年02月04日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包