MySQL 概述

余生颓废 提交于 2020-11-30 21:37:33

什么是MySQL?

MySQL 是一款开源的 [ 关系型数据库软件系统 , RDBMS ] ,在GPL(General Public License) 的许可下根据需求可自定义源码。

虽说Oracle 为商业数据库的无冕之王,但随着阿里、网易、雅虎等大型互联网企业的推动,目前MySQL已经成为当今最流行的开源数据库,并一步步开始占领原有商业数据库的市场...

数据库排名[1]
https://db-engines.com/en/ranking

MySQL发展历史

最初为AB公司的产品,Mysql5.0及之前的版本均由AB公司管理,

在2008年的时候AB公司被 Sun 公司收购,Mysql也就归属到了 Sun公司 下;

没多久,Sun公司就被Oracle公司收购了,此期间诞生了一个Sun向Oracle的过渡版本,Mysql 5.5 版本;

直到 Mysql 5.6 就彻底归属于Oracle公司旗下了,从Oracle收购Mysql以来,Mysql发展的速度及新的功能越来越强大,逐步向Oracle靠拢,如:表空间、redo、undo分离、隐藏索引等;

2019年,Mysql8.0.15已经GA(官方发布稳定版本),
可以看到在Oracle公司下的Mysql是发育比较好的


MySQL的工作原理

工作原理


存储引擎


MySQL 数据库的存储引擎是插件式的,在创建数据表的时候可以根据需求选用合适的引擎,因为InnoDB引擎各方面功能更完善,优秀,所以默认存储引擎为InnoDB,下面介绍常见的存储引擎。

MyISAM

是MySQL 5.5之前的默认数据库引擎性能极佳,而且提供了大量的特性包括全文索引、压缩、空间函数等MyISAM不支持事务和行级锁缺陷是崩溃后数据无法安全恢复

InnoDB

MySQL 5.5版本后使用 InnoDB(事务性数据库引擎)为默认数据库引擎;用于MySQL的事务安全(ACID支持)存储引擎;具有提交,回滚和崩溃恢复的功能以保护用户数据;支持事务处理,外部键(foreign key),行级锁 等高级数据库功能;

MyISAM 与 InnoDB 区别

1. 是否支持行级锁 : MyISAM 只有表级锁,  而InnoDB 支持行级锁和表级锁,默认为行级锁。
2. InnoDB支持事务和崩溃后的安全恢复,MyISAM不支持;
3. MyISAM 强调的是性能,每次查询具有原子性,其执行比InnoDB类型更快 InnoDB 提供事务支持行锁,外部键等高级数据库功能。 具有事务、回滚和崩溃修复能力的事务安全型表。
4. 是否支持外键:MyISAM不支持,而InnoDB支持......

什么是事务?

事务是逻辑上的 一组操作(一条或多条SQL命令);
要么都执行,要么都不执行。

事务最经典的例子: 假如小明要给小红转账100元,这个转账会涉及到两个关键操作就是:将小明的余额减少100元,将小红的余额增加100元。在这两个操作之间突然出现银行系统崩溃等错误,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。

事务的 [ ACID ] 原则

原子性(Atomicity)

事务是最小的执行单位,不允许分割。事务的原子性确保执行操作要么全部完成,要么失败还原(回滚);

一致性(Consistency)

执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;

隔离性(Isolation)

并发访问数据库时,一个用户的事务不被其他事务所干扰(串行化),各并发事务之间数据库是独立的;

持久性(Durability)

一个事务被提交之后。它对数据库中数据的改变是持久的(数据存盘),即使数据库发生故障也不应该对其有任何影响。

References

[1] 数据库排名: https://db-engines.com/en/ranking

本文分享自微信公众号 - 技能锦囊(Python-wan)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!