mysql常见面试题

[SELECT *] 和[SELECT 全部字段]的 2 种写法有何优缺点?
1. 前者要解析数据字典,后者不需要
2. 结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。
3. 表字段改名,前者不需要修改,后者需要改
4. 后者可以建立索引进行优化,前者无法优化
5. 后者的可读性比前者要高所以,

尽量使用后者来查询

若一张表中只有一个字段 VARCHAR(N)类型,utf8 编码,则 N 最大值为多少?

由于 utf8 的每个字符最多占用 3 个字节。而 MySQL 定义行的长度不能超过65535(text和blob不计算在内),
因此 N 的最大值计算方法为:(65535-1-2)/3。
减去 1 的原因是实际存储从第二个字节开始,减去 2 的原因是因为要在列表长度存储实际的字符长度(长度大于256用两个字节存储),除以 3 是因为 utf8 限制:每个字符最多占用 3 个字节。

MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现)的?

InnoDB 行锁是通过给索引上的索引项加锁来实现的,这一点 MySQL 与Oracle 不同,后者是通过在数据块中对相应数据行加锁来实现的。

InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁

mysql 中 myisam 与 innodb 的区别?

myisam:

1.5.5版本前默认使用myisam引擎
2.支持表级锁,不支持事务,不支持行级锁,不支持外键
3.文件存储为3个文件,数据,搜索目录,表结构

​innodb:

1.5.6后默认使用innodb引擎
2.支持表级锁,行级锁,支持事务,支持外键
3,文件存为2个文件,数据和搜索目录,表结构

请简述常用的索引有哪些种类?

  1. 普通索引:即针对数据库表创建索引

  2. 唯一索引:与普通索引类似,不同的就是:mysql数据库索引列的值必须唯一,但允许有空值

  3. 主键索引:它是一种特殊的索引,不允许有空值,一般是在创建表的时候同时创建主键索引

  4. 组合索引:将数据库表中的多个字段联合起来作为一个组合索引,遵循最左前缀规则

数据库三范式(老生常谈)

  1. 第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分) => 关于列的设计

  2. 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。=> 关于行的设计 通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。

  3. 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

三大范式具有如下特征:

  1. 每一列只有一个值 >>2. 每一行都能区分。 >>3. 每一个表都不包含其他表已经包含的非主关键字信息

清风徐来.水波不兴
原文地址:https://www.cnblogs.com/ghl666/p/11934248.html