【备战面试】每日10道面试题打卡-Day6

news/2024/11/8 20:33:53/

本篇总结的是MySQL知识相关的面试题,后续也会更新其他相关内容

文章目录

  • 1、MySQL常用的存储引擎有什么?它们有什么区别?
  • 2、说一下数据库的三大范式
  • 3、MySQL的数据类型有哪些 ?
  • 4、SQL语句主要分为哪几类?
  • 5、SQL约束有哪些?
  • 6、什么是子查询?
  • 7、了解MySQL的几种连接查询吗?
  • 8、mysql中in和exists的区别?
  • 9、varchar和char的区别?
  • 10、MySQL中int(10)和char(10)和varchar(10)的区别?


1、MySQL常用的存储引擎有什么?它们有什么区别?

答:MySQL常用的存储引擎有InnoDBMyISAM

InnoDB

  • InnoDB是MySQL的默认存储引擎,支持事务、行锁和外键等操作。

MyISAM

  • MyISAM是MySQL5.1版本前默认存储引擎,MyISAM的并发性比较差,不支持事务和外键等操作,默认的锁的粒度为表级锁。

对比如下:
在这里插入图片描述

2、说一下数据库的三大范式

答:

  • 第一范式:确保每列保持原子性,数据表中的所有字段值都是不可分解的原子值
  • 第二范式:确保表中的每列都和主键相关
  • 第三范式:确保每列都和主键列直接相关而不是间接相关。

3、MySQL的数据类型有哪些 ?

答:

整数

  • TINYINT:占用8位存储空间;
  • SMALLINT:占用16位存储空间;
  • MEDIUMINT:占用24位存储空间;
  • INT:占用32位存储空间;
  • BIGINT:占用64位存储空间;

值得注意的是,INT(10)中的10只是表示显示字符的个数,并无实际意义。一般和UNSIGNED ZEROFILL配合使用才有实际意义,例如,数据类型INT(3),属性为UNSIGNED ZEROFILL,如果插入的数据为3的话,实际存储的数据为003。

浮点数

  • FLOATDOUBLEDECIMAL浮点数类型
  • DECIMAL是利用字符串进行处理的,能存储精确的小数
  • 相比于FLOAT和DOUBLE,DECIMAL的效率更低些
  • FLOAT、DOUBLE及DECIMAL都可以指定列宽

例如FLOAT(5,2)表示一共5位,两位存储小数部分,三位存储整数部分。

字符串

  • 字符串常用的主要有CHARVARCHAR
  • VARCHAR主要用于存储可变长字符串,相比于定长的CHAR更节省空间;
  • CHAR是定长的根据定义的字符串长度分配空间

应用场景:

  1. 对于经常变更的数据使用CHAR更好,CHAR不容易产生碎片
  2. 对于非常短的列也是使用CHAR更好些,CHAR相比于VARCHAR在效率上更高些
  3. 一般避免使用TEXT/BLOB等类型,因为查询时会使用临时表,造成严重的性能开销。

日期

  • 比较常用的有yeartimedatedatetimetimestamp
  • datetime保存从1000年到9999年的时间,精度到秒,使用八字节的存储空间与时区无关
  • timestamp和UNIX的时间戳相同,保存从1970年1月1日午夜到2038年的时间,精度到秒,使用四个字节的存储空间,并且与时区相关

应用场景:尽量使用timestamp,相比于datetime它有着更高的空间效率

4、SQL语句主要分为哪几类?

答:

  • 数据据定义语言DDL(Data Definition Language):主要有CREATEDROPALTER对逻辑结构有操作的,包括表结构、视图和索引;
  • 数据库查询语言DQL(Data Query Language):主要以SELECT为主;
  • 数据操纵语言DML(Data Manipulation Language):主要包括INSERTUPDATEDELETE
  • 数据控制功能DCL(Data Control Language):主要是权限控制操作,包括GRANTREVOKECOMMITROLLBACK等。

5、SQL约束有哪些?

答:有主键约束、外键约束、唯一约束、默认约束和Check约束,主要区别如下:

主键约束

  • 主键为在表中存在一列或者多列的组合,能唯一标识表中的每一行。
  • 一个表只有一个主键,并且主键约束的列不能为空

外键约束

  • 外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列
  • 只有主表的主键可以被从表用作外键被约束的从表的列可以不是主键
  • 所以创建外键约束需要先定义主表的主键,然后定义从表的外键

唯一约束

  • 确保表中的一列数据没有相同的值,一个表可以定义多个唯一约束

默认约束

  • 在插入新数据时,如果该行没有指定数据,系统将默认值赋给该行
  • 如果没有设置没默认值,则为NULL

Check约束

  • Check会通过逻辑表达式来判断数据的有效性,用来限制输入一列或者多列的值的范围。
  • 在列更新数据时,输入的内容必须满足Check约束的条件。

6、什么是子查询?

答:子查询就是把一个查询的结果在另一个查询中使用

子查询可以分为以下几类:

  • 标量子查询:指子查询返回的是一个值
  • 列子查询:指子查询的结果是n行一列
  • 行子查询:指子查询返回的结果一行n列
  • 表子查询:指子查询是n行n列的一个数据表

7、了解MySQL的几种连接查询吗?

答:MySQl的连接查询主要可以分为外连接,内连接,交叉连接,区别如下:

外连接

  • 外连接主要分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)、全外连接。
    • 左外连接:返回包括左表中的所有记录和右表中连接字段相等的记录,右表中不符合条件的数据为null。
    • 右外连接:返回包括右表中的所有记录和左表中连接字段相等的记录,左表中不符合条件的数据为null。
    • 全外连接:返回左右表中所有的记录和左右表中连接字段相等的记录。MySQL中不支持全外连接。

内连接

  • 内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。

交叉连接

  • 使用笛卡尔积的一种连接。

8、mysql中in和exists的区别?

答:inexists一般用于子查询

  • 使用exists时会先进行外表查询,将查询到的每行数据带入到内表查询中看是否满足条件;
  • 使用in一般会先进行内表查询获取结果集,然后对外表查询匹配结果集,返回数据。
  • in内表查询或者外表查询过程中都会用到索引
  • exists仅在内表查询时会用到索引
  • 一般来说,当子查询的结果集比较大,外表较小使用exist效率更高
  • 当子查询寻得结果集较小,外表较大时,使用in效率更高
  • 对于not innot existsnot exists效率比not in的效率高,与子查询的结果集无关,因为not in对于内外表都进行了全表扫描,没有使用到索引not exists的子查询中可以用到表上的索引

9、varchar和char的区别?

答:

  • varchar表示变长,char表示长度固定

    • 当所插入的字符超过他们的长度时:
      • 严格模式下,会拒绝插入并提示错误信息
      • 一般模式下,会截取后插入
    • 当所插入的字符小于他们的长度时:
      • char(5),无论插入的字符长度是多少,长度都是5,插入字符长度小于5,则用空格补充
      • 对于varchar(5),如果插入的字符长度小于5,则存储的字符长度就是插入字符的长度,不会填充
  • 存储容量不同

    • 对于char来说,最多能存放的字符个数为255。
    • 对于varchar来说,最多能存放的字符个数是65532。
  • 存储速度不同

    • char长度固定,存储速度会比varchar一些,但在空间上会占用额外的空间,属于一种空间换时间的策略。
    • varchar长度不固定,而varchar空间利用率些,但存储速度慢,属于一种时间换空间的策略。

10、MySQL中int(10)和char(10)和varchar(10)的区别?

答:int(10)中的10表示的是显示数据的长度,而char(10)varchar(10)表示的是存储数据的大小


http://www.ppmy.cn/news/31584.html

相关文章

SD卡通信协议那些事

SD卡通信 SD卡通信协议主要包括物理层、数据传输层和应用层三个部分。 物理层:SD卡使用SPI或SDIO两种物理层协议进行通信。SPI是一种同步串行通信协议,使用4根信号线进行通信;SDIO是一种异步串行通信协议,使用9根信号线进行通信…

Hadoop学习

1.HDFS命令行解释 2.HDFS命令行常用操作 3.HDFS各角色职责介绍 SecondaryNameNode不能代替NameNode,只起辅助作用 4.HDFS写数据流程 HDFS写数据流程 即有一份复制成功就算写入完成 5.MapReduce介绍 MR缺点: 实时计算性能差不能进行流式计算 6.Map阶段…

多线程的风险 --- 线程安全

✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 ✨每日一语:低头赶路,敬事如仪;自知自心,其路则明。 目 录🍸一. 线程不安全🍹二. 线程不安全的原因&#x1f…

并发编程---java锁

java锁一 多线程锁synchronized案例分析1.1synchronized介绍1.2 synchronized案例分析1.2.1.标准访问,请问先打印邮件还是短信?1.2.2.邮件⽅法暂停4秒钟,请问先打印邮件还是短信?分析1.2.3.新增⼀个普通⽅法hello(&…

Linux进程和任务管理和分析和排查系统故障

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放&#xff0…

TryHackMe-VulnNet: Active(ez 域渗透)

VulnNet: Active VulnNet Entertainment在他们以前的网络中遇到了不好的时光,该网络遭受了多次破坏。现在,他们移动了整个基础架构,并再次聘请您作为核心渗透测试人员。您的目标是获得对系统的完全访问权限并破坏域。 这应该是我在thm打的最…

【C语言】操作符详解总结(万字)

操作符详解1. 操作符分类2. 算术操作符3. 移位操作符3.1 整数的二进制是怎么形成的3.2 左移操作符3.3 右移操作符4. 位操作符5. 赋值操作符6. 单目操作符6.1 单目操作符介绍6.2 sizeof 和 数组7. 关系操作符8. 逻辑操作符9. 条件操作符9.1 练习19.2 练习210. 逗号表达式11. 下标…

数据推介⎮情感语音合成音库

在语音交互领域,语音合成是重要的一环,其技术也在不断发展。近年来,人们对情感合成的兴趣和需求越来越高。情感语音合成会让机器如真人一样和我们交流,它可以用愤怒的声音、开心的声音、悲伤的声音等不同情绪来表达,甚…