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.mzph.cn/bicheng/3188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tar 和 zip 打包压缩命令

1. tar 文件的归档 tar [选项] 归档压缩后生成的文件 打包文件常用参数&#xff1a;-c # 创建文件-x # 提取解压还原文件-v # 显示详细执行过程-f # 指定备份文件-t # 列出压缩包中包括哪些文件&#xff0c;不解包&#xff0c;查看包中的内容-C # 指定解压位置 #对/o…

Kubernetes(K8S)特性有哪些?

Kubernetes简介 Kubernetes是一个开源的容器编排引擎&#xff0c;用于自动部署、扩展和管理容器化应用程序。它提供了一个平台来管理容器化应用程序的部署、扩展、自动化操作、服务发现和负载均衡等功能&#xff0c;让开发者能够更轻松地管理和运行容器化应用程序。 Kubernet…

Unity | 集成 Protobuf(proto 转 cs 插件及序列化与反序列化)

1. 添加 dll 1. 下载 protobuf 源码 根据需要下载 protobuf 指定版本的源码&#xff0c;这里以 v3.21.12&#xff08;protobuf-csharp-3.21.12.zip&#xff09;为例&#xff1a; 下载地址&#xff1a;「https://github.com/protocolbuffers/protobuf/releases」 2. 下载 Vis…

Java面试之JVM篇(共七篇---完结)

Java面试之虚拟机篇&#xff08;一&#xff09;&#xff1a;JVM概述与内存结构 在Java的面试中&#xff0c;虚拟机&#xff08;JVM&#xff09;是必考的知识点之一。作为Java程序运行的基础环境&#xff0c;JVM对Java的性能和稳定性有着至关重要的影响。本文将首先介绍JVM的基…

常见内网代理工具及其应用

常见内网代理工具 1. 正向代理&#xff1a;Squid原理示例 2. 反向代理&#xff1a;Nginx原理示例 3. SOCKS代理&#xff1a;Shadowsocks原理示例 零基础入门学习路线视频配套资料&国内外网安书籍、文档网络安全面试题 常见的内网代理工具包括多种类型&#xff0c;如正向代理…

自从用上电路仿真软件后,我才领悟到的4大奥秘

在电子工程领域&#xff0c;电路仿真软件已成为设计师们不可或缺的得力助手。自从我开始使用这款软件&#xff0c;它不仅极大提升了我的工作效率&#xff0c;还让我领悟到了许多前所未有的知识。今天&#xff0c;就让我来分享自从用上电路仿真软件后&#xff0c;我才知道的4件事…

【必须收藏】一文汇编山西省太原市及各地市区高新技术企业认定申报奖励优惠政策

一、山西省及各地市区高新技术企业申报奖励 &#xff08;高企、政策项目申报、专利商标版权DL&#xff01;zi询见个人简介 [疑难解答]&#xff09; &#xff08;一&#xff09;太原市高新技术企业申报奖励政策 建立高新技术企业培育库&#xff0c;对入库两年内通过高新技术企…

【分享】WinRAR软件如何压缩文件?

WinRAR是一款功能强大的压缩文件管理工具&#xff0c;支持多种压缩文件格式&#xff0c;那如何使用WinRAR来压缩文件呢&#xff1f;不清楚的小伙伴一起来看看吧&#xff01; 压缩方法&#xff1a; 首先&#xff0c;安装好WinRAR工具&#xff0c;然后选中需要压缩的文件或文件夹…

OSPF的学习笔记

1.OSPF &#xff08;1&#xff09;链路状态路由协议的路由信息并不是像距离矢量路由协议那样(邻居告诉的)&#xff0c;通过收集自身以及邻居发出的LSA(原材料)&#xff0c;并LSA放到指定仓库里面(LSDB)&#xff0c;通过SPF算法&#xff0c;以自己为根计算到达网络每个节点的最优…

Linux文件/目录高级管理三 头歌

1Linux文件/目录setuid和setgid 编程要求 在右侧编辑器中补充代码&#xff0c;具体编程要求如下&#xff1a; 使用助记语法为系统已存在文件oldFile1(默认权限为&#xff1a;rw_rw_r__)设置setuid权限; 使用助记语法为系统已存在目录oldDir1(默认权限为&#xff1a;rwxrwxrw…

php跨域和https访问http问题分析

1、https的web访问http地址的资源 问题&#xff1a;请求状态status(canceled) 解决办法&#xff1a;把资源地址改成https的 /*** HTTP地址改成HTTPS地址* param $url*/ function changeHttp2Https(&$url){if(stripos($url, http://) ! false){$url str_replace(http…

手机图片制作动态gif怎么做?不能错过的好用网站!

现在手机可是人人不离手的&#xff0c;而且手机上的很多软件功能已经逐渐取代了电脑。有时候我们想要把手机中的照片变成有动态效果的gif动图还不想下载软件的时候&#xff0c;就可以用Gif在线制作网站&#xff0c;不用下载软件&#xff0c;手机电脑都能在线操作。非常的方便小…

小孩近视用白炽灯好吗?分享多款央视推荐的护眼台灯

很多家长关心&#xff0c;小孩近视用白炽灯好吗&#xff1f;首先肯定是不太建议的&#xff0c;虽说白炽灯价格便宜&#xff0c;显色较好&#xff0c;不过光线会比较集中刺眼&#xff0c;而且由于是发热发光&#xff0c;也存在一定的安全隐患&#xff0c;更重要的是光衰现象会比…

道可云元宇宙每日资讯|广东:打造人工智能、新型储能等新增长点

道可云元宇宙每日简报&#xff08;2024年4月25日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 广东&#xff1a;打造人工智能、新型储能等新增长点 日前&#xff0c;广东省委常委会召开会议&#xff0c;会议指出&#xff0c;聚焦完善产业体系&#xff0c;统筹推…

Linux Docker下载镜像更改默认存储位置/usr/lib/docker

用于解决docker默认存储位置磁盘空间不足&#xff0c;切换存储位置 1、执行下面命令查看 现在docker的存储位置 docker info | grep "Docker Root Dir" 1.2、如果之前已经下载过镜像可以用mv命令把原来的镜像复制到新的地址 mv /var/lib/docker /data/docker 2、…

考研日常记录(upd 24.4.24)

由于实在太无聊了 &#xff0c; 所以记录以下考研备考日常 &#xff0c; 增加一点成就感 &#xff0c; 获得一点前进动力。 文章目录 2024.4.18 周四课程情况&#xff1a;时间规划&#xff1a; 2024.4.19 周五课程情况&#xff1a;时间规划&#xff1a; 2024.4.20 周六2024.4.2…

【Shell】循环结构——for和while循环实例

Shell可以重复地执行特定的指令&#xff0c;直到特定的条件被满足为止。这重复执行的一组指令就叫做循环 特点&#xff1a; 首先&#xff0c;循环条件中使用的变量必须是已初始化的&#xff0c;然后在循环中开始执行每次在循环开始时进行一次测试重复地执行一个代码块 循环实例…

沤血整理:好用的员工电脑行为审计软件

电脑行为审计是指对电脑用户在使用电脑过程中的行为进行监控、记录和分析的过程。 员工电脑行为审计可以帮助企业了解员工在工作电脑上的行为&#xff0c;从而保障企业信息安全&#xff0c;提高员工工作效率&#xff0c;并更好地管理员工&#xff0c;常用的电脑行为审计软件有…

(三)小程序学习笔记——生命周期、API

1、小程序的启动&#xff1a; 冷启动&#xff1a; 如果用户首次打开&#xff0c;或小程序销毁后被用户再次打开&#xff0c;此时小程序需要重新加载启动&#xff0c;即冷启动。 热启动&#xff1a; 如果用户已经打开过某小程序&#xff0c;然后在一定时间内再次打开该小程序&…

Java | Leetcode Java题解之第48题旋转图像

题目&#xff1a; 题解&#xff1a; class Solution {public void rotate(int[][] matrix) {int n matrix.length;// 水平翻转for (int i 0; i < n / 2; i) {for (int j 0; j < n; j) {int temp matrix[i][j];matrix[i][j] matrix[n - i - 1][j];matrix[n - i - 1]…