MYSQL基础面试题


1、数据库三大范式你能说一下吗?

第一范式:1NF是对属性的原子性约束,要求字段具有原子性,不可再分解;比如有一张学生表(学号,学生姓名,联系方式),表主键为学号,因为学生的联系方式又可以拆分为手机号和家庭座机,这时候为了满足1NF,需要将联系方式字段拆分为手机号和家庭座机两个字段。

第二范式:2NF是在满足第一范式的前提下,非主键字段不能出现部分依赖主键;比如有一张学生表(学号,学生姓名,年龄),表主键为(学号,学生姓名),此时表设计是不满足2NF的,因为年龄部分依赖于主键,主键可以决定年龄,但是复合主键内的学号也可以决定年龄,为了满足2NF,需要将复合主键拆分为以学号为主键的表设计。

第三范式:3NF是在满足第二范式的前提下,非主键字段不能出现传递依赖,比如有一张学生表(学号,姓名, 年龄, 学院编号, 学院地点),表主键为学号,此时表设计是满足2NF的,(学号) → (姓名, 年龄, 所在学院, 学院地点),但是是不满足3NF的,因为存在着(学号) → (学院编号) → (学院地点)的传递依赖关系,学院地点不是直接依赖于学号,而是通过学院编号依赖于学号,为了满足3NF,应该将表拆分,学号,姓名, 年龄, 学院编号),(学院编号, 学院地点)。

2、sql语句分类:

DDL:数据定义语言(create drop)

DML:数据操作语句(insert update delete)

DQL:数据查询语句(select )

DCL:数据控制语句,进行授权和权限回收(grant revoke)

TPL:数据事务语句(commit collback savapoint)

3、SQL 的 select 语句完整的执行顺序

1、from 子句组装来自不同数据源的数据;
2、where 子句基于指定的条件对记录行进行筛选;
3、group by 子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用 having 子句筛选分组;
6、计算所有的表达式;
7、select 的字段;
8、使用 order by 对结果集进行排序。

4、delete、drop、truncate区别

truncate 和 delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所占的空间。
删除数据的速度,drop> truncate > delete

delete属于DML语言,需要事务管理,commit之后才能生效。drop和truncate属于DDL语言,操作立刻生效,不可回滚。

使用场合:
当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a where clause), 用 delete.

注意: 对于有主外键关系的表,不能使用truncate而应该使用不带where子句的delete语句,由于truncate不记录在日志中,不能够激活触发器。


5、char和varchar的区别?

char 是一种固定长度的字符串类型,(如果数据类型不足固定长度的话,会自动用0补齐)
varchar 是一种可变长度的字符串类型,(如果数据类型不足长度的话,自动将长度缩放成我们所输入的数据类型的长度)

6、事务是什么?事务的四大特性是什么?

  事务是一组原子性的 SQL 语句,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组操作的全部语句,那么就执行该组查询。如果其中任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态;

一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的;

隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。

7、事务的隔离级别,mysql默认的隔离级别是什么?

读未提交(Read uncommitted),一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证。

读已提交(Read committed),一个事务要等另一个事务提交后才能读取数据,可避免脏读的发生。

可重复读(Repeatable read),就是在开始读取数据(事务开启)时,不再允许修改操作,可避免脏读、不可重复读的发生。

串行(Serializable),是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

MySQL的默认隔离级别是Repeatable read

8、索引是什么?它是如何加快查询性能的?

索引是对数据库表中一列或多列的值进行排序的一种数据结构,也就是说索引是一种数据结构。数据库在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中通过二分法等高效率算法一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询性能。类似新华字典的目录,如果没有目录的话,我们想要查找一个汉字的话,就必须检索整本字典,而正因为有了目录,我们只要知道我们所要查找的偏旁或者拼音首字母,就可以快速地定位到我们想要查找汉字的所在页码。

9、MySQL主要的索引类型

普通索引:是最基本的索引,它没有任何限制;

唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;

主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;

组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;

全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较,MySQL中MyISAM支持全文索引而InnoDB不支持;

10、说一说什么是外键?它的优缺点是什么?

  外键指的是外键约束,目的是保持数据一致性,完整性,控制存储在外键表中的数据,使两张表形成关联,外键只能引用外表中列的值;

优点:由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。外键在一定程度上说明的业务逻辑,会使设计周到具体全面。

缺点:可以用触发器或应用程序保证数据的完整性;过分强调或者说使用外键会平添开发难度,导致表过多,更改业务困难,扩展困难等问题;不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert, update, delete 数据的时候更快);

11、在什么时候你会选择使用外键,为什么?

  在我的业务逻辑非常简单,业务一旦确定不会轻易更改,表结构简单,业务量小的时候我会选择使用外键。因为当不符合以上条件的时候,外键会影响业务的扩展和修改,当数据量庞大时,会严重影响增删改查的效率。

12、说一说你能想到的sql语句优化,至少五种

1)避免select *,将需要查找的字段列出来;

2)使用连接(join)来代替子查询;

3)拆分大的delete或insert语句;

4)使用limit对查询结果的记录进行限定;

5)用 exists 代替 in 是一个好的选择;

6)用Where子句替换HAVING 子句 因为HAVING 只会在检索出所有记录之后才对结果集进行过滤;

7)不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引尽量避免在where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描;

8)尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描;

9)尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描;

13、MyISAM与InnoDB的区别?

1)InnoDB 支持事务;MyISAM 不支持事务;
2)InnoDB 支持行级锁;MyISAM 支持表级锁;
3)InnoDB 支持 MVCC(多版本并发控制);MyISAM 不支持;
4)InnoDB 支持外键,MyISAM 不支持;
5)InnoDB 不支持全文索引;MyISAM 支持;
6)InnoDB 不保存表的总行数,执行 select count(*) from table 时需要全表扫描;MyISAM 用一个变量保存表的总行数,查总行数速度很快;
7)InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。辅助索引需要两次查询,先查询到主键,再通过主键查询到数据。主键太大,其他索引也会很大;MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的。

后续补充

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,146评论 0 9
  • 主键,外键,超键,候选键 数据库事务的四个特征及含义 视图的作用,可以更改吗 视图是虚拟的表;只包含动态检索数据的...
    DamaoShao阅读 6,240评论 0 3
  • 数据库常见面试题(开发者篇) 什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程...
    Java3y阅读 4,773评论 4 144
  • 一.索引 1.索引是什么 索引是对数据库中一或多个列值的排序,帮助数据库高效获取数据的数据结构假如我们用类比的方法...
    TechTalker阅读 4,783评论 0 0
  • 今天,不满打满算,可以称为第一天。 仅仅是收拾东西出发而已,就让人激动、紧张、兴奋不已。 出发前老生常谈的安全,此...
    女汉子may颖阅读 215评论 0 0