自学内容网 自学内容网

01---Mysql面试刷题---10题

01-数据库的三范式是什么

  1. ‌‌第一范式(1NF)‌:简单来说就是列不可再分
    • 定义:数据库表的每一列都是不可分割的原子数据项,即实体中的某个属性不能有多个值或者不能有重复的属性。
    • 要求:表的每一行只包含一个实例的信息,简而言之,就是无重复的列。
  2. ‌‌第二范式(2NF)‌:简单来说行可以唯一区分(主键约束 )
    • 定义:在满足第一范式的基础上,表中不存在部分依赖,即非主属性必须完全依赖于主属性
    • 要求:数据库表中的每个实例或记录必须可以被唯一地区分,通常通过选取一个能区分每个实体的属性或属性组作为实体的唯一标识(主键)。
  3. ‌‌第三范式(3NF)‌表的非主属性不能依赖与其他表的非主属性 (外键约束)
    • 定义:在满足第二范式的基础上消除非主键字段之间的传递依赖
    • 要求:每个非主键字段只依赖于主键,而不依赖于其他非主键字段,以避免数据冗余
  • 三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式 建立第一第二范式上。
    • 一般来说,数据库设计只需满足第三范式(3NF)即可。这样可以确保数据库的冗余度较低,同时保持数据的一致性和完整性。

02-MySQL常用的存储引擎有哪些

  • mysql 常用引擎包括:MYISAM、 Innodb、 Memory

    • MYISAM全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用
      空间 相对较小,对事务完整性没有要求,以 select、insert 为主的应用基本上可以使用这引
    • Innodb行级锁提供了具有提交、回滚和崩溃回复能力的事务安全,支持自动增长列,
      支持 外键约束,并发能力强
      ,占用空间是 MYISAM 的 2.5 倍,处理效率相对会差一些
    • Memory全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在
      mysql 重启时会丢失
      ,默认使用 HASH 索引,检索效率非常高,但不适用于精确查找,主要用
      于 那些内容变化不频繁的代码表
  • 在MySQL 5.5及之前的版本中,默认的存储引擎是MyISAM,在5.5版本之后默认的存储引擎是INNODB

mysql存储引擎的认识

03-innoDB和MyISAM存储引擎的区别

  1. InnoDB 支持事务,MyISAM 不支持,对于 InnoDB 每一条 SQL 语言都默认封装成事务,自
    动提交,这样会影响速度,所以最好把多条 SQL 语言放在 begin 和 commit 之间,组成一
    个事务;
  2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;
  3. InnoDB 是聚集索引数据文件是和索引绑在一起的,必须有主键,通过主键索引效率很高。
    但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应
    该 过大,因为主键太大,其他索引也都会很大
    。而 MyISAM 是非聚集索引,数据文件是分
    离的, 索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而 MyISAM
    用 一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
  5. Innodb 不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM 要高;

04-什么是数据库的事务(Transaction)

  • 简单来说就是:多条 sql 语句,要么全部成功,要么全部失败
  • 详细点:数据库的事务是**数据库管理系统(DBMS)**执行过程中的一个逻辑单位,由一个或多个SQL语句作为一个整体一起向系统提交,要么全部执行,要么全部不执行,即“要么全做,要么全不做”(All or Nothing)的原则。事务是数据库并发控制的基本单位,是用户定义的一个操作序列。这些操作要么完全执行,要么完全不执行,是一个不可分割的工作单位。

05-数据库事务的特性

  • 数据库事务特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性 (Durability),简 称 ACID
    • 原子性:事务是一个不可分割的工作单位,事务中的操作要么全部完成,要么全部不执行。如果事务在执行过程中发生错误或被其他事务干扰,则已经执行的操作需要回滚(Rollback)到事务开始前的状态,就像这个事务从未执行过一样。
    • 一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态,即数据不会被破坏。一致性与原子性是密切相关的。事务在执行前后,数据库的完整性约束没有被破坏。例如,银行的转账操作,转账前后两个账户的金额总和必须保持不变。(如 A 转账 100 元给 B,不管操作是否成功,A 和 B 的账户总额是不变的。)
    • 隔离性:数据库系统提供一定的隔离机制,使得事务在不受外部并发操作干扰的“独立”环境下运行。隔离性可以避免由于并发操作引起的数据不一致问题。但完全的隔离需要牺牲一定的并发性能,因此数据库系统通常提供不同级别的隔离性。
    • 持久性:一旦事务被提交,它对数据库的修改就是永久性的,接下来的其他操作和数据库故障不应该对其产生任何影响。即使数据库系统发生故障,提交的事务所做的修改也不会丢失。

06-索引是什么

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

mysql的索引

07-什么是视图

  1. 视图是一种虚拟的表,具有和物理表相同的功能。
  2. 具体来说,视图并不在数据库中存储实际的数据,而是基于一个或多个实际表(或其他视图)的查询结果动态生成的。用户可以通过视图以一种特定的方式查看数据库中的数据,同时隐藏了底层表的复杂性。
  • 视图的基本特性
    • 虚拟性:视图是虚拟的,它不包含数据,只是存储了查询的定义。每次访问视图时,实际上是根据视图的定义从基本表中检索数据。
    • 安全性:视图可以用于限制用户对基本表中数据的访问,用户只能看到视图定义中涉及的列和数据。
    • 简化查询:视图可以封装复杂的查询逻辑,使得用户可以通过简单的查询语句来访问复杂的数据集。
  1. 可以对视图进行增,改,查,操作,视图通常是 由一个表或者多个表的行或列的子集。它使得我们获取数据更容易。( 类似多表查询)

mysql视图的认识

08-修改视图对基本表有什么影响

  • 修改视图对基本表的影响(要分两种情况的:直接修改视图的数据修改视图的定义
    • 1、直接修改视图数据
      • 在大多数数据库系统中,如果视图是可更新的(即满足一定的条件,如没有包含聚合函数、没有分组等),那么对视图进行INSERT、UPDATE或DELETE操作实际上会直接影响到基本表。这是因为视图只是数据的“窗口”,修改视图中的数据就是修改这个窗口背后的基本表数据。
      • 然而,如果视图定义中包含了复杂的查询逻辑(如聚合函数、分组、联结等),那么通常不允许直接通过视图来修改数据,因为数据库系统无法准确地将这些修改映射回基本表。
    • 2、修改视图定义
      • 修改视图的定义(即修改创建视图的SELECT语句)本身并不会直接影响基本表的数据。但是,新的视图定义可能会改变用户通过视图看到的数据集,从而间接影响用户对数据的理解和操作。
  • 特殊情况
    • 只读视图:有些视图被设计为只读,这意味着用户不能通过视图来修改基本表中的数据。这种视图通常用于报告或数据分析目的。
    • 物化视图:虽然传统的视图是虚拟的,但某些数据库系统支持物化视图(Materialized View),它实际上会存储查询结果的数据。对物化视图的修改可能需要特殊的处理,如刷新机制,以确保视图中的数据与基本表保持一致。但是,这种修改通常不直接针对基本表进行,而是针对物化视图本身。
  • 结论:因此,当说“对视图的修改不影响基本表”时,这通常指的是在特定条件下(如视图是只读的,或者修改的是视图的定义而非视图中的数据)的情况。在大多数情况下,如果视图是可更新的,并且满足一定的条件,那么对视图的修改实际上会直接影响到基本表。然而,这种影响是通过视图这个“窗口”来间接实现的,而不是直接修改基本表本身。

09、简单说一下drop,delete、truncate的区别

  • SQL 中的 drop、delete、truncate 都表示删除,但是三者有一些差别,主要从一下五个方面分析:

  • 1、作用范围上的区别

    • DROP:用于删除整个表(包括表结构、数据、索引等)。一旦执行,表及其所有内容都将被永久移除,且无法恢复(除非有备份)。
    • DELETE:用于删除表中的数据行,但保留表结构、索引等。可以结合WHERE子句来指定删除哪些行。
    • TRUNCATE:用于删除表中的所有数据行,但不删除表本身。与DELETE不带WHERE子句相比,TRUNCATE通常更快,因为它不记录每行数据的删除操作,而是直接重置表的数据页。
  • 2、操作类型上的区别

    • DROP 和 TRUNCATE 是数据定义语言(DDL)操作,它们通常立即生效,不需要显式提交(在某些数据库管理系统中可能需要)。
    • DELETE 是数据操纵语言 (DML)操作,它通常需要显式提交(在支持事务的数据库管理系统中)才能生效。
  • 3、对空间的影响的区别

    • TRUNCATE操作后,表和索引所占用的空间通常会恢复到初始大小(或接近初始大小),因为它直接重置了表的数据页。
    • DELETE操作后,表或索引所占用的空间可能不会减小,因为删除的数据行所占用的空间可能仍然被保留为“空洞”,直到后续的数据插入或数据库维护操作(如重建索引、压缩表等)来回收这些空间。
    • DROP操作会释放表或索引所占用的所有空间。
  • 4、日志和恢复的区别

    • DELETE 操作会被记录到数据库的日志中,因此可以通过日志来恢复被删除的数据(在支持日志恢复功能的数据库管理系统中)。
    • TRUNCATE 和 DROP 操作通常不会记录详细的行级删除日志(尽管它们可能会记录操作本身),因此一旦执行,被删除的数据可能难以恢复(除非有备份)。
  • 5、使用场景

    • DROP 通常用于需要完全移除表及其所有内容的场景。
    • DELETE 用于需要删除表中特定行数据的场景,特别是当需要基于某些条件来删除行时。
    • TRUNCATE 用于需要快速清空表中所有数据的场景,且不关心数据的恢复。

delete和truncate的区别

10-什么是内连接、左外连接、右外连接

  1. 内连接、左外连接和右外连接是数据库查询中常用的表连接类型,它们用于将两个或多个表中的数据进行关联,以实现复杂的数据查询。
    • 内连接(Inner Join):内连接,也称为普通连接或自然连接,是通过匹配两个表之间的共同列来返回满足连接条件的行。具体来说,它会从两个表中选出那些在两个表中都有匹配的行,并将这些行的数据组合成一个新的结果集。如果某行在其中一个表中没有匹配的行,则该行不会出现在结果集中。因此,内连接可能会丢失信息,因为它只包含匹配的行。
    • 左外连接(Left Outer Join 或 Left Join):左外连接是以左表为基础,将左表中的所有行与右表中匹配的行连接起来。如果左表中的某行在右表中没有匹配的行,则结果集中该行的右表部分将包含空值(NULL)。简而言之,左外连接返回左表中的所有行,以及右表中与左表匹配的行。如果左表中的某行在右表中没有匹配项,则结果中该行的右表部分将全部为NULL。
    • 右外连接(Right Outer Join 或 Right Join)右外连接与左外连接相反,它是以右表为基础进行的连接。右外连接会返回右表中的所有行,以及左表中与右表匹配的行。如果右表中的某行在左表中没有匹配项,则结果中该行的左表部分将全部为NULL。简而言之,右外连接确保了右表中的所有数据都被包含在结果集中,即使它们在左表中没有匹配项。

mysql多表查询


原文地址:https://blog.csdn.net/weixin_64044840/article/details/142593382

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!