书籍推荐
- 《SQL基础教程(第2版)》 (入门级)
- 《高性能MySQL : 第3版》 (进阶)
- SQL Tutorial (SQL语句学习,英文)、 SQL Tutorial (SQL语句学习,中文)、 SQL语句在线练习 (非常不错)
- Github-MySQL入门教程(MySQL tutorial book) (从零开始学习MySQL,主要是面向MySQL数据库管理系统初学者)
- 官方教程
- MySQL 教程(菜鸟教程)
- 中国5级行政区域mysql库
【MySQL/数据库 知识点总结】MySQL开发技巧: MySQL开发技巧(一) MySQL开发技巧(二) MySQL开发技巧(三)
MySQL5.7新特性及相关优化技巧: MySQL5.7版本新特性 性能优化之MySQL优化
MySQL集群(PXC)入门 MyCAT入门及应用
常见问题总结什么是MySQL?MySQL 是一种关系型数据库,在JAVA企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展 。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的 。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改 。MySQL的默认端口号是3306 。
存储引擎一些常用命令查看MySQL提供的所有存储引擎
mysql> show engines;
文章插图
从上图我们可以查看出 MySQL 当前默认的存储引擎是InnoDB,并且在5.7版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务 。
查看MySQL当前默认的存储引擎
我们也可以通过下面的命令查看默认的存储引擎 。
mysql> show variables like '%storage_engine%';
查看表的存储引擎show table status like "table_name" ;
文章插图
MyISAM和InnoDB区别MyISAM是MySQL的默认数据库引擎(5.5版之前) 。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复 。不过,5.5版本之后,MySQL引入了InnoDB(事务性数据库引擎),MySQL 5.5版本后默认的存储引擎为InnoDB 。
大多数时候我们使用的都是 InnoDB 存储引擎,但是在某些情况下使用 MyISAM 也是合适的比如读密集的情况下 。(如果你不介意 MyISAM 崩溃恢复问题的话) 。
两者的对比:
- 是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁 。
- 是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持 。但是InnoDB 提供事务支持事务,外部键等高级数据库功能 。具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表 。
- 是否支持外键: MyISAM不支持,而InnoDB支持 。
- 是否支持MVCC :仅 InnoDB 支持 。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一 。推荐阅读: MySQL-InnoDB-MVCC多版本并发控制
- ......
不要轻易相信“MyISAM比InnoDB快”之类的经验之谈,这个结论往往不是绝对的 。在很多我们已知场景中,InnoDB的速度都可以让MyISAM望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用 。
一般情况下我们选择 InnoDB 都是没有问题的,但是某些情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择 。但是一般情况下,我们都是需要考虑到这些问题的 。
字符集及校对规则字符集指的是一种从二进制编码到某类字符符号的映射 。校对规则则是指某种字符集下的排序规则 。MySQL中每一种字符集都会对应一系列的校对规则 。
MySQL采用的是类似继承的方式指定字符集的默认值,每个数据库以及每张数据表都有自己的默认值,他们逐层继承 。比如:某个库中所有表的默认字符集将是该数据库所指定的字符集(这些表在没有指定字符集的情况下,才会采用默认字符集) PS:整理自《Java工程师修炼之道》
推荐阅读
- 数据库分库分表最佳实践及说明
- 为什么数据库会丢失数据?
- html知识点实践经验总结
- mysql数据库备份及其恢复
- IT基础设施国产替代:依次为芯片、操作系统、中间件、数据库
- 在线yum安装 Linux中安装MySQL数据库下
- 玩转Docker:十分钟搞定MySQL的安装
- 三分钟学会如何找回mysql密码
- 学习前端需要掌握哪些知识点?
- mysql数据库13种常用函数方法总结