mysql面试题整理2

1.数据库三范式是什么?

  • 第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系 统都满足第一范式数据库表中的字段都是单一属性的,不可再分)
  • 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足 第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每 个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储 各个实例的惟一标识。这个惟一属性列被称为主关键字或主键
  • 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三 范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关 键字信息。
    所以第三范式具有如下特征:>>1. 每一列只有一个 值 >>2. 每一行都能区分。 >>3. 每一个表都不包含其他表已经包含 的非主关键字信息

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

  • 普通索引: 即针对数据库表创建索引
  • 唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值 必须唯一,但允许有空值
  • 主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的 时候同时创建主键索引
  • 组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。 即将数据库表中的多个字段联合起来作为一个组合索引

3.以及在 mysql 数据库中索引的工作机制是什么?
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更 新数据库表中数据。索引的实现通常使用 B 树及其变种 B+树

4.mysql 的复制原理以及流程
Mysql 内建的复制功能是构建大型,高性能应用程序的基础。将 Mysql 的数据 分布到多个系统上去,这种分布的机制,是通过将 Mysql 的某一台主机的数据 复制到其它主机(slaves)上,并重新执行一遍来实现的。 * 复制过程中一 个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将 更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志 可以记录发送到从服务器的更新。 当一个从服务器连接主服务器时,它通知主 服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生 的任何更新,然后封锁并等待主服务器通知新的更新。
过程如下:

  • 主服务器 把更新记录到二进制日志文件中。
  • 从服务器把主服务器的二进制日志拷贝 到自己的中继日志(replay log)中。
  • 从服务器重做中继日志中的时间, 把更新应用到自己的数据库上

5.mysql 支持的复制类型?

  • 基于语句的复制: 在主服务器上执行的 SQL 语句,在从服务器上执行 同样的语句。MySQL 默认采用基于语句的复制,效率比较高。 一旦发 现没法精确复制时,会自动选着基于行的复制
  • 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执 行一遍. 从 mysql5.0 开始支持
  • 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法 精确的复制时,就会采用基于行的复制

6.mysql 中 varchar 与 char 的区别以及 varchar(50)中的 50 代表的涵 义?

  • varchar 与 char 的区别: char 是一种固定长度的类型,varchar 则是 一种可变长度的类型.
  • varchar(50)中 50 的涵义 : 最多存放 50 个字节
  • int(20)中 20 的涵义: int(M)中的 M indicates the maximum display width (最大显示宽度)for integer types. The maximum legal display width is 255.

7…表中有大字段 X(例如:text 类型),且字段 X 不会经常更新,以读为 为主,将该字段拆成子表好处是什么?
如果字段里面有大字段(text,blob)类型的,而且这些字段的访问并不多,这 时候放在一起就变成缺点了。 MYSQL 数据库的记录存储是按行存储的,数据 块大小又是固定的(16K),每条记录越小,相同的块存储的记录就越多。此 时应该把大字段拆走,这样应付大部分小字段的查询时,就能提高效率。当需 要查询大字段时,此时的关联查询是不可避免的,但也是值得的。拆分开后, 对字段的 UPDAE 就要 UPDATE 多个表了

8.MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现) 的?
InnoDB 行锁是通过给索引上的索引项加锁来实现的,这一点 MySQL 与 Oracle 不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB 这 种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB 才使用行级 锁,否则,InnoDB 将使用表锁!

*9. [SELECT ] 和[SELECT 全部字段]的 2 种写法有何优缺点?

  • 前者要解析数据字典,后者不需要
  • 结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序
  • 表字段改名,前者不需要修改,后者需要改
  • 后者可以建立索引进行优化,前者无法优化
  • 后者的可读性比前者要高

10.HAVNG 子句 和 WHERE 的异同点?

  • 语法上:where 用表中列名,having 用 select 结果别名
  • 影响结果范围:where 从表读出数据的行数,having 返回客户端的行 数
  • 索引:where 可以使用索引,having 不能使用索引,只能在临时结果 集操
  • where 后面不能使用聚集函数,having 是专门使用聚集函数的

11.MySQL 当记录不存在时 insert,当记录存在时 update,语句怎么写?
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

											***帅气的远远啊***
发布了61 篇原创文章 · 获赞 50 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41585840/article/details/104325027
今日推荐