mysql 面试题

1、MySQL中myisam与innodb的区别,至少5点:

  • InnoDB支持事物,而MyISAM不支持事物
  • InnoDB支持行级锁,而MyISAM支持表级锁
  • InnoDB支持MVCC, 而MyISAM不支持
  • InnoDB支持外键,而MyISAM不支持
  • InnoDB在mysql5.6前不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,5.6时不支持中文全文索引,MyISAM支持FULLTEXT类型的全文索引

2、innodb引擎的4大特性

  • 插入缓冲(insert buffer)
  • 二次写(double write)
  • 自适应哈希索引(ahi)
  • 预读(read ahead)

3、myisam与innodb二者select count(*)哪个更快,为什么

  • myisam更快,因为myisam内部维护了一个计数器,可以直接调取。

4、varchar与char的区别

  • char是一种固定长度的类型,varchar则是一种可变长度的类型

5、varchar(50)中50的涵义

  • 最多存放50个字符,varchar(50)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样)

6、int(20)中20的涵义

  • 是指显示字符的长度。但要加参数的,最大为255,比如它是记录行数的id,插入10笔资料,它就显示00000000001 ~~~00000000010,当字符的位数超过11,它也只显示11位,如果你没有加那个让它未满11位就前面加0的参数,它不会在前面加0
    20表示最大显示宽度为20,但仍占4字节存储,存储范围不变;

7、事物的4种隔离级别

  • 读未提交(RU)
  • 读已提交(RC)
  • 可重复读(RR)
  • 串行



8、事务是如何通过日志来实现的,说得越深入越好。

  • 事务日志是通过redo和innodb的存储引擎日志缓冲(Innodb log buffer)来实现的,当开始一个事务的时候,会记录该事务的lsn(log sequence number)号; 当事务执行时,会往InnoDB存储引擎的日志的日志缓存里面插入事务日志;当事务提交时,必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来控制),也就是写数据前,需要先写日志。这种方式称为“预写日志方式”

9、数据库是否支持emoji表情,如果不支持,如何操作?

  • 如果是utf8字符集的话,需要升级至utf8_mb4方可支持

10、索引是什么?有什么作用以及优缺点?

  • 索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构
  • 索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
  • 索引加快数据库的检索速度
  • 唯一索引可以确保每一行数据的唯一性
  • 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能
  • 索引降低了插入、删除、修改等维护任务的速度
  • 索引需要占物理和数据空间

11、MySQL数据库几个基本的索引类型

  • 普通索引、唯一索引、主键索引、全文索引

12、什么是事务?

  • 事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

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


14、如何区分FLOAT和DOUBLE?

  • 浮点数以8位精度存储在FLOAT中,并且有四个字节。
  • 浮点数存储在DOUBLE中,精度为18位,有八个字节。

你可能感兴趣的:(mysql 面试题)