MySQL必问面试题之一

MySQL必问面试题之一做了几年程序员,经历大大小小的面试,今天总结一些必问的mysql题目,给大家参考参考:数据库三大范式是什么第一范式:每个列都不可以再拆分。第二范

大家好,欢迎来到IT知识分享网。

做了几年程序员,经历大大小小的面试,今天总结一些必问的mysql题目,给大家参考参考:

数据库三大范式是什么

第一范式:每个列都不可以再拆分。

第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。

第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。

MySQL 有关权限的表都有哪几个?

MySQL 服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql 数据库里,由mysql install db脚本初始化。

这些权限表分别user,db,table_priv,columns_priv和host。下面分别介绍一下这些表的结构和内容:

user 权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。

db 权限表:记录各个帐号在各个数据库上的操作权限。

table_priv 权限表:记录数据表级的操作权限。

columns_priv 权限表:记录数据列级的操作权限。

host 权限表:配合db 权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT 和REVOKE 语句的影响。

MySQL 的Binlog 有有几种录入格式?分别有什么区别?

有三种格式,statement,row 和mixed。

statement 模式下,每一条会修改数据的sql 都会记录在binlog 中。不需要记录每一行的变化,减少了binlog 日志量,节约了IO,提高性能。由于sql 的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制。

row 级别下,不记录sql 语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改动(比如altertable),因此这种模式的文件保存的信息太多,日志量太大。

mixed,一种折中的方案,普通操作使用statement 记录,当无法使用statement 的时候使用row。

MySQL 存储引擎MyISAM 与InnoDB 区别

锁粒度方面:由于锁粒度不同,InnoDB 比MyISAM 支持更高的并发;InnoDB 的锁粒度为行锁、MyISAM 的锁粒度为表锁。行锁需要对每一行进行加锁,所以锁的开销更大,但是能解决脏读和不可重复读的问题,相对来说也更容易发生死锁

可恢复性上:由于InnoDB 是有事务日志的,所以在产生由于数据库崩溃等条件后,可以根据日志文件进行恢复。而MyISAM 则没有事务日志。

查询性能上:MylSAM 要优于InnoDB,因为InnoDB 在查询过程中,是需要维护数据缓存,而且查询过程是先定位到行所在的数据块,然后在从数据块中定位到要查找的行;而MyISAM 可以直接定位到数据所在的内存地址,可以直接找到数据。

表结构文件上:MyISAM 的表结构文件包括:frm(表结构定义),.MYI(索引),.MYD(数据);而InnoDB 的表数据文件为:ibd 和frm(表结构定义)。

MyISAM 索引与InnoDB 索引的区别?

InnoDB 索引是聚簇索引,MyISAM 索引是非聚簇索引。

InnoDB 的主键索引的叶子节点存储着行数据,因此主键索引非常高效。

MyISAM 索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。

InnoDB 非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。

MySQL 中有哪几种锁?

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

MySQL 中InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

SQL 标准定义的四个隔离级别为:

read uncommited:读到未提交数据

read committed:不可重复读

repeatable read:可重复读

serializable :串行事物

四种隔离级别解决的并发问题:

MySQL必问面试题之一

脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

CHAR 和VARCHAR 的区别?

CHAR 和VARCHAR 类型在存储和检索方面有所不同

CHAR 列长度固定为创建表时声明的长度,长度值范围是1 到255

当CHAR 值被存储时,它们被用空格填充到特定长度,检索CHAR 值时需删除尾随空格。

MySQL必问面试题之一

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/49620.html

(0)
上一篇 2024-08-29 21:26
下一篇 2024-08-31 16:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信