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 ,每当行被更改时,时间戳字段将获取当前时间戳。