关于mysql面试题(持续更新)

数据库的面试

    • 1.关系型数据库和非关系型数据库区别
    • 2.数据库存储引擎
    • 3.事务的四个特性
    • 4.oracle和myql的区别(只列举了一部分)
    • 5.char和varchar的区别
    • 6.不同索引类型的区别
    • 7.选择索引的原则
    • 8.导致SQL执行慢的原因
    • 9.物理备份的方式
    • 10.有哪些备份类型
    • 11.Mysql备份工具

1.关系型数据库和非关系型数据库区别

关系型数据库:
1.关系型数据库在存储数据时实际就是采用的一张二维表(比如和excel表格一样)
2.市场占有量较大的是Mysql和Oracle数据库,而互联网场景最常用的是Mysql数据库,就连阿里都换成了Mysql数据库
3.通过sql结构化查询语言来存取,管理关系型数据库的数据
4. 关系型数据库在保持数据安全和数据一致性方面很强,遵循 ACID 理论 ACID指的的事务的4大特性
5.存放在磁盘
优点:
1.易于维护:都是使用表结构,格式一致
2.使用方便:SQL语言通用,可用于复杂查询
3.复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询
缺点:
1.读写能力较差,尤其是海量数据的高效率读写
2.固定的表结构,灵活度稍欠
3.高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈

非关系型数据库
1.NoSQL 数据库不是否定关系型数据库,而是作为关系数据库的一个重要补充。
2.NoSQL 数据库为了灵活及高性能、高并发而生,忽略影响高性能、高并发的功能。
3.在NoSQL 数据库领域,当今的最典型产品为 Redis(持久化缓存)、MongoDB、Memcached(纯内存)等。
4.NoSQL 数据库没有标准的查询语言(SQL),通常使用数据接口或者查询API。
优点:
1.格式灵活:存储数据的格式可以使key,value形式,文档形式,图片形式等
2.速度快:nosql可以使用硬盘或者随机存储器作为载体,比如内存,而关系型数据库只能使用硬盘
3.高扩展性
4.成本低:nosql数据库部署简单,基本都是开源软件
缺点:
1.不支持sql语言,学习和使用成本高
2.无事务处理
3.数据结构相对复杂,复杂查询方面稍欠

非关系型数据库中的Redis:

  1. 支持内存缓存,这个功能相当于 Memcached。
  2. 支持持久化存储,这个功能相当于 MemcacheDB。
  3. 数据类型更丰富。比其他 Key-Value 库功能更强。
  4. 支持主从集群,分布式。

2.数据库存储引擎

这里只说InnoDB和MyISAM
1.InnoDB存储引擎:默认引擎,最常用的InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键
InnoDB特点:支持事务处理,支持外键,支持崩溃修复和并发控制. 如果需要对事物的完整性要求较高(比如银行),要求实现并发控制(比如售票),那么选择InnoDB有很大的优势,如果需要频繁更新,删除操作的数据库,也选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)

2.MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展,她是在WEB,数据仓储和其他应用环境下最常用的数据存储之一,又有较高的插入,查询速度,但不支持事务
MyISAM特点:插入速度快,空间和内存使用比较低,如果表主要是用于插入新记录和读出记录,那么选择MyiSAM能实现处理高效率,如果应用的完整性,并发性要求比较低,也可以使用

如何选择引擎:如果要提供提交、回滚、并要求实现并发控制,InnoDB是一个好的选择;如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率;
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能。

3.事务的四个特性

1 、原子性 (atomicity):强调事务的不可分割.
2 、一致性 (consistency):事务的执行的前后数据的完整性保持一致.
3 、隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
4 、持续性 (durability) :事务一旦结束,数据就要记录到永久存储器中,通常是保存进物理数据库

4.oracle和myql的区别(只列举了一部分)

1、Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。
2、Oracle的内存占有量非常大,而mysql非常小
3、MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。
4、MySQL字符串可以使用双引号包起来,而Oracle只可以单引号
5、MySQL分页用limit关键字,而Oracle使用rownum字段表明位置,而且只能使用小于,不能使用大于。
6、Oracle在处理长字符串的时候,长度是小于等于4000个字节,如果要插入更长的字符串,考虑用CLOB类型,插入修改记录前要做进行修改和 长度的判断,如果为空,如果长度超出返回操作处理.(CLOB类型是内置类型,它一般都作为某一行中的一列,有些数据库也有别名)
7、MySQL中0、1判断真假,Oracle中true false
8、MySQL中命令默认commit,但是Oracle需要手动提交
9、MySQL在windows环境下大小写不敏感 在unix,linux环境下区分大小写,Oracle不区分

5.char和varchar的区别

  • char表示定长字符串,长度是固定的;如果插入数据的长度小于char的固定长度时,则用空格填充;因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间。
  • varchar表示可变长字符串,长度是可变的;插入的数据是多长,就按照多长来存储;varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间。
  • 结合性能角度(char更快),节省磁盘空间角度(varchar更小),具体情况还需具体来设计数据库才是妥当的做法。
    (至于为什么长度不固定:十分频繁改变的column(字段)。因为varchar每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char来说是不需要的)

6.不同索引类型的区别

1.普通索引(INDEX):索引列值可重复,常用于过滤数据,例如:以商品作为索引,检索种类为"手机"的商品
2.唯一索引(UNIQUE):索引列值可以为NULL,但是必须唯一,主要用于标识一列数据不允许重复的特性,相比主键索引不常用于检索的场景
3.主键索引(PRIMARY KEY):索引列值必须唯一,不能为NULL,一个表之鞥有一个主键索引,昰行的唯一标识,因而其主要用途是检索特定数据
4全文索引(FULL TEXT):给每个字段创建索引,效率较低,常用于文本中内容检索

7.选择索引的原则

1.常用于查询条件的字段适合作为索引,例如where语句和join语句中出现的列
2.唯一性太差的字段不适合作为索引,例如性别
3.更新过于频繁(更新频率远高于检索频率)的字段不适合作为索引
4.使用索引的好处是索引通过一定的算法建立了索引值与列值直接的联系,可以通过索引直接获取对应的行数据,而无需进行全表搜索,因而加快了检索速度

8.导致SQL执行慢的原因

1.硬件问题,如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了
2.没有索引或者索引失效
3.数据过多(分库分表)
4.服务器调优及各个参数设置(调整my.cnf),索引:当查询速度过慢时,可以通过建立优化查询速度,可以当做调优

9.物理备份的方式

1.完全备份
每次对数据进行完整的备份,即对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。
优点:备份与恢复操作简单方便,恢复时一次恢复到位,恢复速度快
缺点:占用空间大,备份速度慢
2.增量备份
每次备份上一次备份到现在产生的新数据
只有那些在上次完全备份或者增量备份后被修改的数据才会被备份。以上次完整备份或上次的增量备份的时间为时间点,仅备份这之间的数据变化.
特点:因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份起按备份时间顺序,逐个备份版本进行恢复,恢复时间长,如中间某次的备份数据损坏,将导致数据的丢失。
3.差异备份
备份那些自从第一次次完全备份之后被修改过的所有文件,备份的时间起点是从第一次次完整备份起,且以后每次备份都是和第一次完整备份进行比较(注意是第一次,不是上一次),备份自第一次完整备份以来所有的修改过的文件。备份数据量会越来越大。
特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后一次的差异版本,恢复速度介于完整备份和增量备份之间。

10.有哪些备份类型

Mysql备份类型:
物理备份: 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制
1.热备(hot backup)
在线备份,数据库处于运行状态,这种备份方法依赖于数据库的日志文件

  • 对应用基本无影响(但是性能还是会有下降,所以尽量不要在主上做备份,在从库上做)

2.冷备(cold backup)
备份数据文件,需要停机,是在关闭数据库的时候进行的

  • 备份 datadir 目录下的所有文件

3.温备(warm backup)

  • 针对myisam的备份(myisam不支持热备),备份时候实例只读不可写,数据库锁定表格(不可写入但可读)的状态下进行的
  • 对应用影响很大
  • 通常加一个读锁

逻辑备份:
备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库,效率相对较低。

11.Mysql备份工具

1、ibbackup

  • 官方备份工具
  • 收费
  • 物理备份
    2、xtrabackup
  • 开源社区备份工具
  • 开源免费,上面的免费版本(老版本有问题,备份出来的数据可能有问题)
  • 物理备份
    3、mysqldump
  • 官方自带备份工具 开源免费
  • 逻辑备份(速度慢)
    4、mysqlbackup
  • mysql 官方备份工具
  • innodb 引擎的表mysqlbackup可以进行热备
  • 非innodb表mysqlbackup就只能温备
  • 物理备份,备份还原速度快
  • 适合大规模数据使用

你可能感兴趣的:(mysql)