面试_mysql_MySQL常见面试题

136 阅读5分钟

关系型数据库与非关系型数据库都有哪些?有什么区别?

SQL - 主要代表:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)。

NoSQL - 主要代表:MongoDB,Redis,CouchDB,HBase。

区别:

  • NoSQL没有主键外键的概念
  • SQL存在二维表中;而NoSQL则更加灵活,存储方式可以是JSON文档、哈希表或者其他方式。
  • NoSQL不支持事务,不支持锁
  • ...(很多)



InnoDB 和 MyISAM 的比较?

  • 前者适合写操作和更新操作,后者适合读操作。

    MyISAM读快的原因:索引在内存中;而InnoDB在磁盘上需要I/O

    InnoDB写快的原因:默认是行锁,粒度小;而MyISAM默认是表锁,更新一条数据会锁住整个表,拉低并发效率

  • 关于count()函数,InnoDB需要逐行扫描计数;MyISAM 自身记录了这个属性,可以直接返回




什么是视图

它充当的是虚拟表的角色。可以理解为存储的查询语句,当下一步要调用的时候,就会产生结果集。




范式

对象拆分的好,基本上就满足三大范式了。简单来说,三大范式如下,

  • 第一范式,字段不可拆分,原子性。
  • 第二范式,字段都应该与主键有关联。
  • 第三范式,表中不应该包含多余属性。



MySQL 问题排查都有哪些手段?

  1. 使用 show processlist; 命令查看当前所有连接信息;
  2. 在sql语句前加 explain ,查询 SQL 语句执行计划;
  3. 开启慢查询日志,查看慢查询的 SQL。



MySQL 数据库 CPU 飙升到 500% 的话他怎么处理?

先用 show processlist 命令查看正在运行的线程,分析 state 字段,如果一个线程在给定状态中停留了许多秒,那么可能存在问题。定位到线程后用kill命令杀死,在后台调整,比如加索引,优化sql语句等。




varchar和char的使用场景

  • char字符固定长度
  • varchar长度可变,但是不能超过设置的长度

一般设置登录名可以使用varchar,而加密后的密码一般设置为char,因为加密算法的结果是固定长度的。




内连接与外连接

在where中用 join 将两个表连接。

内连接分为等值连接和自然连接:

  • 等值连接:取两者笛卡尔积中属性值相等的元组
  • 自然连接是一种特殊的等值连接。它要求去除重复列。

外连接分为左连接、右连接和全连接:

  • 左连接:查询A表中所有数据以及B表中符合联结条件的数据
  • 右连接:查询B表中所有数据以及A表中符合联结条件的数据
  • 全连接:返回左右表的所有行。哪个表中没有的就用null填充。(MySQL不支持全外连接,所以只能采取关键字UNION来联合左、右连接)

如果没有用where做连接,返回的结果就是笛卡儿积,检索出的数量就是两表行数的成绩,其中有很多记录都是不存在的。




UNION 与 UNION ALL 的区别

  • UNION ALL:把来自多个 SELECT 语句的结果组合到一个结果集合中
  • UNION :在前者的基础上去重



count和sum的区别,以及count(*)和count(列名)的区别

Count和sum区别:求和用累加sum();求行的个数用累计count

Count(*)包括了所有的列,在统计结果的时候不会忽略列值为null的行

Count(列名)只包括列名那一项,会忽略值为null的行




什么是候选键、主键、外键

  • 候选键:能唯一标识一条数据的属性或属性集合(列或多个列),称为候选键。 表中可以有多个候选键。

  • 主键:从候选键中选择出主键。每张表最多只能有一个主键,主键的取值不能为空值,也不能重复。数据库可以没有主键,但MySQL这个数据库 要求 要有主键。

  • 外键:一个表中存在的另一个表的主键,就是此表的外键,外键的取值可以为空值,也可以重复。




关系模型中的三类约束

  • 实体完整性:要求主键唯一且不能为空。
  • 参照完整性:要求外键的取值或者为空,或者等于参照表中某个主键的值。并给外键设置四个动作约束条件,即restrict等四个。
  • 用户定义完整性:给属性列设置约束条件:not null 非空约束、unique 约束、check 约束(MySQL不支持,可设置但无效果)等



MySQL外键更新与删除不同设置的区别

  • restrict(默认):当父表更新删除某记录时,子表检查是否有相关记录,如果有,则不允许父表操作

  • no action:与restrict相同

  • cascade:级联,当父表更新删除某记录时,子表会自动更新删除相关记录

  • set null:当父表更新删除某记录时时,子表会把相关字段设为null (所以设计子表时该字段要允许为null)




请你写一些基本的SQL语句

  • 选择:select * from table1 where 范围
  • 插入:insert into table1(field1,field2) values(value1,value2),(value1,value2)
  • 删除:delete from table1 where 范围
  • 更新:update table1 set field1=value1 where 范围
  • 查找:select * from table1 where field1 like '%value1%'
  • 排序:select * from table1 order by field1,field2 [desc]
  • 总数:select count as totalcount from table1
  • 求和:select sum(field1) as sumvalue from table1
  • 平均:select avg(field1) as avgvalue from table1
  • 最大:select max(field1) as maxvalue from table1
  • 最小:select min(field1) as minvalue from table1

判断相等:【A = B】

判断不相等:【A != B】

判断奇偶数,可以用:【A%2】 ,不能用【A mod 2】