Mysql面试题
2024-06-12 21:15:26 0 举报
AI智能生成
登录查看完整内容
Mysql是一个流行的开源关系数据库管理系统,广泛应用于Web应用、企业级应用和大数据分析等领域。以下是一些核心的Mysql面试题: 1. 什么是SQL?解释DDL、DML和DCL。 2. 描述Mysql的逻辑架构和物理架构。 3. 主键和外键有什么区别? 4. 解释Mysql的隔离级别及其影响。 5. 什么是索引?如何使用Mysql创建索引? 6. 如何优化Mysql查询? 7. 描述复制和集群在Mysql中的作用。 8. 解释Mysql中的事务和锁。 9. 如何实现Mysql数据库的备份和恢复? 10. 什么是Mysql的存储引擎,它们的区别是什么?
作者其他创作
大纲/内容
可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
什么是事务
原子性 Atomicity:一个事务中的所有操作,要么全部完成,要么全部不完成,最小的执行单位。 一致性 Consistency: 事务执行前后,都处于一致性状态。 隔离性 Isolation :数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止 多个事务并发执行时由于交叉执行而导致数据的不一致。 持久性 Durability: 事务执行完成后,对数据的修改就是永久的,即便系统故障也不会丢失。
事务4个特性
READ_UNCOMMITTED这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据。解决第一类丢失更 新的问题,但是会出现脏读、不可重复读、第二类丢失更新的问题,幻读 。READ_COMMITTED保证一个事务修改的数据提交后才能被另外一个事务读取,即另外一个事务不能读取该事务未提交的数据。解决第一类丢失更新和脏读的问题,但会出现不可重复读、第二类丢失更新的问题,幻读问题 REPEATABLE_READ保证一个事务相同条件下前后两次获取的数据是一致的 (注意是 一个事务,可以理解为事务间的数据互不影响)解决第一类丢失更新,脏读、不可重复读、第二类丢失更新的问题,但会出幻读。 SERIALIZABLE事务串行执行,解决了脏读、不可重复读、幻读。但效率很差,所以实际中一般不用。
事务隔离级别分别是
可重复读 (REPEATABLE-READ
InnoDB默认事务隔离级别?如何查看当前隔离级别
事务
数据库的锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性,这样才能保证在高并发 的情况下,访问数据库的时候,数据不会出现问题。
什么是锁?
是指两个或两个以上进程执行过程中,因竞争共享资源造成的相互等待现象。
死锁?
设置超时时间。超时后自动释放。 发起死锁检测,主动回滚其中一条事务,让其他事务继续执行。
.如何处理死锁?
锁
创建用户:CREATE USER 'username'@ 'host' IDENTIFIED BY 'password' ;
授权:GRANT privileges ON databasename .tablename TO 'username'@ 'host' ; username :用户名 host:可以登陆的主机地址。本地用户用localhost表示,任意远程主机用通配符%。 password:登陆密码,密码可以为空表示不需要密码登陆服务器 databasename: 数据库名称。 tablename:表名称, *代表所有表。
如何创建用户?授权?
delete : 仅删除表数据,支持条件过滤,支持回滚。记录日志。因此比较慢。delete from table_name;
truncate: 仅删除所有数据,不支持条件过滤,不支持回滚。不记录日志,效率高于delete。truncate table table_name;
drop:删除表数据同时删除表结构。将表所占的空间都释放掉。删除效率最高。drop table table_name;
Mysql删除表的几种方式?区别?
explain sql;
二、select_type
1 、system表中只有一行数据或者是空表,这是const类型的一个特例。且只能用于myisam和memory表。如果是 Innodb引擎表, type列在这个情况通常都是all或者index
2 、const最多只有一行记录匹配。当联合主键或唯一索引的所有字段跟常量值比较时, join类型为const。其他数 据库也叫做唯一索引扫描
3 、eq_ref多表join时,对于来自前面表的每一行,在当前表中只能找到一行。这可能是除了system和const之外最 好的类型。当主键或唯一非NULL索引的所有字段都被用作join联接时会使用此类型。eq_ref可用于使用'='操作符作比较的索引列。比较的值可以是常量,也可以是使用在此表之前读取的表 的列的表达式。相对于下面的ref区别就是它使用的唯一索引,即主键或唯一索引,而ref使用的是非唯一索引或者 普通索引。eq_ref只能找到一行,而ref能找到多行
4 、ref对于来自前面表的每一行,在此表的索引中可以匹配到多行。若联接只用到索引的最左前缀或索引不是 主键或唯一索引时,使用ref类型(也就是说,此联接能够匹配多行记录)。ref可用于使用'='或'<=>'操作符作比较的索引列。
5 、 fulltext使用全文索引的时候是这个类型。要注意, 全文索引的优先级很高,若全文索引和普通索引同时存在 时, mysql不管代价,优先选择使用全文索引
6 、ref_or_null跟ref类型类似,只是增加了null值的比较。实际用的不多。
7 、index_merge表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方 排序这个在ref_or_null之后,但是实际上由于要读取多个索引,性能可能大部分时间都不如range
8 、unique_subquery用于where中的in形式子查询,子查询返回不重复值唯一值,可以完全替换子查询,效率更高。 该类型替换了下面形式的IN子查询的ref:value IN (SELECT primary_key FROM single_table WHERE some_expr)
9 、index_subquery该联接类型类似于unique_subquery。适用于非唯一索引,可以返回重复值。
11 、index索引全表扫描,把索引从头到尾扫一遍。这里包含两种情况:一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快,因 为索引通常比数据表小,而且还能避免二次查询。在extra中显示Using index,反之,如果在索引上进 行全表扫描,没有Using index的提示。
12 、all全表扫描,性能最差。
四、 type这是最重要的字段之一,显示查询使用了何种类型。从最好到最差的连接类型依次为知system ,const ,eq_ref ,ref ,fulltext ,ref_or_null ,index_merge ,unique_subquery, index_subquery ,range ,index ,ALL
五、 possible_keys查询可能使用到的索引都会在这里列出来。
六、 Keykey列显示MySQL实际使用的键(索引)要想强制MySQL使用或忽视possible_keys列中的索引,可以使用FORCE INDEX 、USE INDEX或者 IGNORE INDEX。select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。
七、 key_len表示索引中使用的字节数。key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。不损失精确性的情况下,长度越短越好 。
八、 ref表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。
九、 rowsrows 也是一个重要的字段。 这是mysql估算的需要扫描的行数(不是精确值)。
explain列有哪些?含义?
获取select 语句执行计划
数据库是“按照数据结构来组织、存储和管理数据的仓库” 。是一个长期存储在计算机内的、有组织的、 可共享的、统一管理的大量数据的集合。
什么是数据库?
MyISAM 、 InnoDB 、BDB 、MEMORY 、MERGE 、EXAMPLE 、NDB Cluster 、 ARCHIVE 、CSV、BLACKHOLE 、FEDERATED。Tips:InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
MySql的存储引擎有哪些
1.Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用 Myisam。每个MyISAM 在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是 .frm (存储表定义) 、.MYD (MYData,存储数据) 、.MYI (MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。
2.InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比 Myisam 的存储引 擎, InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
常用的2种存储引擎
可以针对表设置引擎吗?如何设置?
2. InnoDB:用于事务处理应用程序,具有众多特性,包括 ACID 事务支持。
3. Memory: 将 所有数据保存在RAM 中, 在 需要快速查找引用和其他类似数据的环境下,可 提供极快 的访问。
选择合适的存储引擎
选择合适的数据类型
Mysql存储引擎
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构, 它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引 的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
什么是索引
1. 搜索的索引列,不一定是所要选择的列。最适合索引的列是出现在WHERE子句中的列,或连接子句 中指定的列,而不是出现在SELECT 关键字后的选择列表中的列。
2. 使用憔一索引。考虑某列中值的分布。 对于憔一值的列,索引的效果最好,而具有多个 重复值的 列,其索引效果最差。
4. 利用最左前缀。在创建一个 n 列的索引时,实际是创建了 MySQL 可利用的 n 个索引。 多列索引可 起几个索引的作用,因为可利用索引中最左边的列集来匹配行。 这样的列集 称为最左前缀。 (这与索 引一个列的前缀不同,索引一个列的前缀是利用该的n前个字 符作为索引值 )
6. 考虑在列上进行的比较类型。 索引可用于“ <” 、“ < = ”、“ = ”、“ > =” 、“ > ”和 BETWEEN 运算。 在模式具有一个直接量前缀时,索引也用于 LIKE 运算。如果只将某个列用于其他类型的运算时(如 STRCMP( )) ,对其进行索引没有价值。
索引设计原则
1. BTREE2. HASH3. FULLTEXT4. R-Tree
数据结构角度
1、聚集索引(clustered index)2、非聚集索引(non-clustered index)
物理存储角度
1. 普通索引:仅加速查询2. 唯一索引:加速查询 + 列值唯一 (可以有null)3. 主键索引:加速查询 + 列值唯一 (不可以有null)+ 表中只有一个4. 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并5. 全文索引:对文本的内容进行分词,进行搜索
逻辑角度
MySql有哪些索引
Hash索引和B+树索引的底层实现原理
非聚簇索引一定会回表查询吗
在普通索引查到主键索引后,再去主键索引定位记录。等于说非主键索引需要多走一个索引树。
什么是回表?
索引覆盖被查询的字段。
如何避免回表?
本质区别,主键是一种约束,唯一索引是一种索引。主键不能有空值(非空+唯一),唯一索引可以为空。主键可以是其他表的外键,唯一索引不可以。一个表只能有一个主键,唯一索引 可以多个。都可以建立联合主键或联合唯一索引。主键-》聚簇索引,唯一索引->非聚簇索引。
为什么最好建立一个主键?
主键和唯一索引区别?
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。
索引覆盖是什么?
索引不生效的情况?
16
MySql最多创建多少列索引?
show index from table_name;
查看当前表有哪些索引?
Xxx% 走索引, %xxx不走索引。
like走索引吗?
Mysql索引
1NF 指的是数据库表中的任何属性都具有原子性的,不可再分解
2NF 是对记录的憔一性约束,要求记录有憔一标识,即实体的憔一性
3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余
什么是3NF (范式)
Mysql中的数值类型?
mysql服务器可以支持多种字符集 (可以用show character set命令查看所有mysql支持 的字符集) ,在同 一台服务器、同一个数据库、甚至同一个表的不同字段都可以指定使用不 同的字符集。mysql的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念。
如何选择字符集
Mysql字符集
Mysql面试题
0 条评论
回复 删除
下一页