java面试题超详细整理《MySQL篇》一

172 阅读4分钟

MySQL 介绍

MySQL 是一种关系型数据库,主要用于持久化存储我们的系统中的一些数据比如用户信息。

MySQL 是开源软件,使用时无需付费,并且他还是比较成熟的数据库,被大量使用在各种系统中。MySQL 的默认端口号是3306。

获取当前的Mysql 版本: SELECT VERSION();

MySQL由哪些部分组成, 分别用来做什么

Server

连接器: 管理连接,权限验证

分析器: 词法分析,语法分析

优化器: 执行计划生成,索引的选择

执行器: 操作存储引擎,返回执行结果

存储引擎: 存储数据,提供读写接口

MySQL中的执行引擎

常用的存储引擎有以下:

Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。

MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。

MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。

MyISAM与InnoDB区别:

MyISAM Innodb

是否支持事务

不支持事务, 但是每次查询都是原子的

支持 ACID 的事务, 支持事务的四种隔离级别

锁支持

支持表级锁定

支持行级锁定、表级锁定,锁定力度小并发能力高

是否支持外键

不支持外键

支持外键

存储结构

每张表被存放在三个文件:索引文件MYI、数据文件MYD、frm表结构文件

所有的表都保存在同一个数据文件中(也可以是多个),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB

存储空间

MyISAM可被压缩,存储空间较小

InnoDB的表需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引

文件格式

数据和索引是分别存储的,数据.MYD,索引.MYI

数据和索引是集中存储的,.ibd

可移植性、备份及恢复

跨平台的数据转移中会很方,在备份和恢复时可单独针对某个表进行操作

可以拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了

记录存储顺序 按记录插入顺序保存

按主键大小有序插入

哈希索引

不支持

支持

全文索引

支持

不支持(但可以使用Sphinx插件)

大多数时候我们使用的都是 InnoDB 存储引擎,在某些读密集的情况下,使用 MyISAM 也是合适的。不过,前提是你的项目不介意 MyISAM 不支持事务、崩溃恢复等缺点。

MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。

Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键。比如OA自动化办公系统。

MySQL中字段类型CHAR 和 VARCHAR 的区别?

char

varchar

长度

长度固定(1-255)

长度可变

长度不足时 插入的长度小于定义长度时,则用空格填充,检索 CHAR 值时需删除尾随空格

小于定义长度时,按实际插入长度存储

性能

存取速度比varchar快得多 存取速度比char慢得多

使用场景

适合存储很短的,固定长度的字符串,如手机号,MD5值等

适合用在长度不固定场景,如收货地址,邮箱地址等

MySQL中字段类型DATETIME 和 TIMESTA的区别?

类型

占据字节

范围

时区问题

datetime

8 字节

1000-01-01 00:00:00到 9999-12-31 23:59:59

存储与时区无关,不会发生改变

timestamp

4 字节

1970-01-01 00:00:01 到 2038-01-19 11:14:07

如果一个表有一列定义为 TIMESTAMP ,每当行被更改时,时间戳字段将获取当前时间戳。