Mysql面经

1 OR连接是否会使用索引

只有只有把OR连接条件的字段全部都设置索引的时候,才会使用索引,否则将不会使用索引。

2 NULL是什么意思?

Null表示这个字段值未知,尚未存储数据库字段值,它不表示“ ”(空字符串),无法将Null与值进行比较,使用IS NULL或IS NOT NULL来进行NULL判断

3 InnoDB 和 MyISAM 的区别有哪些

1 InnoDB 支持事务,MyISAM 不支持
2 聚簇索引,非聚簇索引
3 支持外键,不支持外键
4 行级锁表级锁都支持,默认行级锁,仅支持表级锁
5 不支持全文索引,支持全文索引,效率高!

4 聚簇索引和非聚集索引

1 一个表中只有一个聚簇索引,可以有多个非聚簇索引。
2 聚簇索引中键的逻辑顺序决定了表中相应行的物理顺序,非聚簇不同。
3 mysql中是二叉树的存储结构,聚簇索引树中的叶子结点相当于数据结点,而非聚簇索引的叶子结点是存放指向数据的指针。
例:通常id是作为聚簇索引,name是非聚簇,查询name时查到相应的指针,这个指针指向id=xxx的数据。这个操作也称之为回表。

5 如果一个表有一列定义为TIMESTAMP,将发生什么?

每当行被修改时,时间戳会更改为当前时间戳。

6 超键、候选键、主键、外键

超键(super key): 在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key): 不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!
主键(primary key): 用户选作元组标识的一个候选键程序主键
外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。

例如:学生信息(学号 身份证号 性别 年龄 身高 体重 宿舍号)和 宿舍信息(宿舍号 楼号)

超键:只要含有“学号”或者“身份证号”两个属性的集合就叫超键,例如R1(学号 性别)、R2(身份证号 身高)、R3(学号 身份证号)等等都可以称为超键!
候选键:不含有多余的属性的超键,比如(学号)、(身份证号)都是候选键,又比如R1中学号这一个属性就可以唯一标识元组了,而有没有性别这一属性对是否唯一标识元组没有任何的影响!
主键:就是用户从很多候选键选出来的一个键就是主键,比如你要求学号是主键,那么身份证号就不可以是主键了!
外键:宿舍号就是学生信息表的外键

7 一张表,里面有ID自增主键,当insert了16条记录之后,删除了第15,16条记录,再把Mysql重启,再insert一条记录,这条记录的ID是17还是15 ?

如果表的存储引擎类型是MyISAM,ID就是17,因为MyISAM类型的表会把自增的最大ID记录在数据文件里,即使Mysql重启,最大ID也不会丢失。而如果表的存储引擎类型是InnoDb,因为InnoDb类型的表只会把自增的最大ID存在内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。

8 说说MyISAM类型的表是怎么存储的?

三个文件:存数据,存索引,存表的定义
每个MyISAM表都会有三种文件格式存储在磁盘上,".frm"文件存储表定义,".MYD"文件存储数据,".MYI"文件存储索引。

9 说说数据库的三范式?

答:
第一范式:数据库表的每一列都是不可分割的原子数据项。
第二范式:非主键列完全依赖于主键,而不能只是依赖于主键的一部分。
第三范式:非主键列只依赖于主键,不依赖于其他非主键。