MySQL数据库扫盲篇
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.MySQL概述
1>.什么是MySQL
MySQL是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统。
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS), MySQL数据库系统使用最常用的数据库管理语言,即结构化查询语言(SQL)进行数据库管理。 MySQL 完全适用于网络,用其建造的数据库可在因特网上的任何地方访问,因此,可以和网络上任何地方的任何人共享数据库。MySQL具有功能强、使用简单、管理方 便、运行速度快、可靠性高、安全保密性强等优点。 MySQL用C和C++编写,它可以工作在许多平台(Unix,Linux,Windows)上,提供了 针对不同编程语言(C,C++,JAVA等)的API函数;使用核心线程实现多线程,能够很好的支持多CPU;提供事务和非事务的存储机制;快速的基于线 程的内存分配系统; MySQL采用双重许可,用户可以在GNU许可条款下以免费软件或开放源码软件的方式使用MySQL软件,也可以从MySQL AB公司获得正式的商业许可。
MySQL体积小、速度快、总体拥有成本低,尤其是开放源码这一特点, 使得许多企业选择了MySQL作为数据库
2>.MySQL历史
MySQL的历史最早可以追溯到1979年,那时Oracle也才刚刚开始, 微软的SQL Server影子都没有:
1979年:
TcX公司 Monty Widenius,Unireg开始研发MySQL,
1996年:
发布MySQL1.,Solaris版本,Linux版本。
1999年:
MySQL AB公司,瑞典。
2003年:
MySQL .0版本,提供视图、存储过程等功能。
2008年:
在2008年1月16号 MySQL被Sun公司收购。
2009年:
2009年,SUN又被Oracle收购。
2009年:
Monty成立MariaDB。
3>.MariaDB数据库介绍
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。
4>.为什么选用 MySQL
如果您正在寻找一种免费的或不昂贵的数据库管理系统,可以有几个选择,如,MySQL、mSQL、Postgres(一种免费的但不支持来自商业供应商引擎的系统)等。 在将MySQL与其他数据库系统进行比较时,所要考虑的最重要的因素是性能、支持、特性(与SQL的一致性、扩展等等)、认证条件和约束条件、价格等。相比之下,MySQL 具有许多吸引人之处:
.速度:
MySQL 运行速度很快。开发者声称 MySQL 可能是目前能得到的最快的数据库。可访问 http://www.mysql.com/benchmark.html (MySQL Web 站点上的性能比较页),调查一下这个性能。
.容易使用:
MySQL 是一个高性能且相对简单的数据库系统,与一些更大系统的设置和管理相比,其复杂程度较低。
.价格:
MySQL 对多数个人用户来说是免费的。
.小巧:
4.1.1的数据库发行版仅仅只有21M,安装完成也仅仅51M。
.支持查询语言:
MySQL 可以利用 SQL(结构化查询语言),SQL 是一种所有现代数据库系统都选用的语言。也可以利用支持 ODBC(开放式数据库连接)的应用程序,ODBC 是 Microsoft 开发的一种数据库通信协议。
.性能:
许多客户机可同时连接到服务器。MySQL数据库没有用户数的限制,多个客户机可同时使用同一个数据库。可利用几个输入查询并查看结果的界面来交互 式地访问 MySQL。这些界面为:命令行客户机程序、Web 浏览器或 X Window System 客户机程序。此外,还有由各种语言(如C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl)编写的界面。因此,可以选择使用已编好的客户机程序或编写自己的客户机应用程序。
.连接性和安全性:
MySQL 是完全网络化的,其数据库可在因特网上的任何地方访问,因此,可以和任何地方的任何人共享数据库。而且 MySQL 还能进行访问控制,可以控制哪些人不能看到您的数据。
.可移植性:
MySQL 可运行在各种版本的 UNIX 以及其他非 UNIX 的系统(如 Windows 和 OS/)上。MySQL 可运行在从家用 PC 到高级的服务器上。
.开放式的分发:
MySQL容易获得;只要使用Web浏览器即可。如果不能理解某样东西是如何起作用的,或者对某个算法感到好奇,可以将其源代码取来,对源代码进行分析。如果不喜欢某些东西,则可以更改它。
5>.MySQL社区版与MySQL企业版区别
如果仅仅是从学习角度,直接使用社区版就可以了,两者没有本质区别。只有在需要官方的商业服务的时候才会看出很大区别。
主要的区别有以下两点。
.企业版只包含稳定之后的功能,社区版包含所有Mysql的最新功能。 也就是说,社区版是企业版的测试版,但是,前者的功能要比后者多。
.官方的支持服务只针对企业版,用户在使用社区版时出现任何问题,Mysql官方概不负责。
至于管理工具,Mysql官方提供的工具都是免费的,从官方网站都可以下载到,同样可以用在社区版的Mysql上。
二.MySQL系列
官方网址:
https://www.mysql.com/(MySQL官网)
http://mariadb.org/(mariadb官网)
https://www.percona.com(percona官网)
https://dev.mysql.com/downloads/mysql/(MySQL社区版下载页面) 官方文档
https://dev.mysql.com/doc/(MySql官网文档)
https://mariadb.com/kb/en/(mariadb官方文档)
https://www.percona.com/software/mysql-database/percona-server(percona官方文档) 版本演变:
MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
MariaDB:5.5 -->10.0--> 10.1 --> 10.2 --> 10.3
三.MySQL相关产品介绍
1>.Oracle MySQL Cloud Service (commercial)
商业付费软件,基于MySQL企业版和Oracle云服务提供企业级 的MySQL数据库服务。
2>.MySQL Enterprise Edition(commercial)
商业付费软件,除了提供MySQL数据库服务之外,又包含了connector(程序连 接接口),partition(表分区),企业级的monitor(监控),HA(高可用),backup(备份), Scalability(扩展)等服务。
3>.MySQL Cluster CGE(commercial)
商业付费软件,基于MySQL Cluster和企业版拥有的各项功能提供企业级的高并发 、高吞吐的数据库服务。
4>.MySQL Community Edition
免费社区软件,提供基础的数据库服务和其他衍生服务。
四.MySQL社区软件相关产品介绍
1>.MySQL Community Server
最流行的开源数据库管理软件,当前最新版本是8.。
2>.MySQL Cluster
基于MySQL数据库而实现的集群服务,自身能提供高并发,高负载等特性。
3>.MyzSQL Fabric MySQL
官方提供的关于MySQL数据库高可用和数据分片的解决方案。
4>.MySQL Connectors
为应用程序提供JDBC/ODBC等访问MySQL数据库的接口服务。
五.MySQL Community Server各版本主要区别
1>.MySQL4.0版本
增加了子查询的支持,字符集增加UTF-,GROUP BY 语句增加了ROLLUP,mysql.user表采用了更好的加密算法,InnoDB开始 支持单独的表空间。
2>.MySQL5.0版本
增加了Stored procedures、Views、Cursors、Triggers、 XA transactions的支持,增加了INFORATION_SCHEMA系统数据库。
3>.MySQL5.5版本
默认存储引擎更改为InnoDB,提高性能和可扩展性, 增加半同步复制。
4>.MySQL5.6版本
提高InnoDB性能,支持延迟复制。
5>.MySQL5.7版本
提升数据库性能和存储引擎,更健壮的复制功能,增 加sys系统库存放数据库管理信息。
6>.MySQL8.0版本
在5.7版本基础之上,又做了更好的性能优化。比如默认的用户加密认证算法的变更。
六.MYSQL的特性
1.插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5..5开始innoDB引擎是MYSQL默认引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
2.单进程,多线程 3.诸多扩展和新特性
4.提供了较多测试组件
5.开源
mysql> SHOW ENGINES; #查看MySQL8.0.x版本支持的"插件式存储引擎";不难发现"InnoDB"为默认的存储引擎,在MySQL5.5之前的版本"MyISAM"为默认的存储引擎。
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
rows in set (0.00 sec) mysql>
mysql>
mysql> SHOW ENGINES; #查看MySQL8.0.x版本支持的"插件式存储引擎";不难发现"InnoDB"为默认的存储引擎,在MySQL5.5之前的版本"MyISAM"为默认的存储引擎。
MariaDB [(none)]> SHOW ENGINES; #查看MariDB5.5.x版本支持的"插件式存储引擎";不难发现"InnoDB"为默认的存储引擎(注意这是Percona公司基于Percona-XtraDB开发的)。
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+--------
----+| Engine | Support | Comment | Transactions | XA | Savepoi
nts |+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+--------
----+| InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES
|| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO
|| MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO
|| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO
|| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO
|| CSV | YES | Stores tables as CSV files | NO | NO | NO
|| ARCHIVE | YES | gzip-compresses tables for a low storage footprint | NO | NO | NO
|| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO
|| FEDERATED | YES | Allows to access tables on other MariaDB servers, supports transactions and more | YES | NO | YES
|| Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO
|+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+--------
----+10 rows in set (0.00 sec) MariaDB [(none)]>
MariaDB [(none)]> SHOW ENGINES; #查看MariDB5.5.x版本支持的"插件式存储引擎";不难发现"InnoDB"为默认的存储引擎(注意这是Percona公司基于Percona-XtraDB开发的)。
七.MysSQL数据库的四种发布版本
alpha版:
内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本包含很多BUG,功能也不全,主要是给开发人员和 测试人员测试和找BUG用的。
beta版:
公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,主要是给“部落”用户和忠实用户测试用的,该版本任然存 在很多BUG,但是相对alpha版要稳定一些。这个阶段版本的软件还会不断增加新功能。如果你是发烧友,可以下载这个版本。(阿里巴巴,去哪网这些公司敢用,因为他们公司内部有高手可以评估这个风险!)
rc版:
全写:Release Candidate(候选版本),该版本又较beta版更进一步了,该版本功能不再增加,和最终发布版功能一样。这个版本有点像最终发行版之前的一个类似 预览版,这个的发布就标明离最终发行版不远了。作为普通用户,如果你很急着用这个软件的话,也可以下载这个版本。
GA版本:
GA版是软件产品正式发布的版本,也称生产版本的产品。一般情况下。企业的生产环节都会选择GA版本的MySQL软件,用于真实的生产环境中。偶尔有个别大型企业会追求新功能驱动而牺牲稳定性使用其他版本,但这是个例。
关于版本的扩展小知识(了解即可):
很多软件在正式发布前都会发布一些预览版或者测试版,一般都叫“beta版”或者 “rc版”,特别是开源软件,甚至有“alpha版”,下面来解释一下各个版本的意思。
alpha版:
内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本包含很多BUG,功能也不全,主要是给开发人员和 测试人员测试和找BUG用的。
beta版:
公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,主要是给“部落”用户和忠实用户测试用的,该版本任然存 在很多BUG,但是相对alpha版要稳定一些。这个阶段版本的软件还会不断增加新功能。如果你是发烧友,可以下载这个版本。
rc版:
全写:Release Candidate(候选版本),该版本又较beta版更进一步了,该版本功能不再增加,和最终发布版功能一样。这个版本有点像最终发行版之前的一个类似 预览版,这个的发布就标明离最终发行版不远了。作为普通用户,如果你很急着用这个软件的话,也可以下载这个版本。
stable版:
稳定版。在开源软件中,都有stable版,这个就是开源软件的最终发行版,用户可以放心大胆的用了。
另外,对于商业软件,还有一下版本:
RTM版:
全称为Release to Manufacture。工厂版。改版程序已经固定,就差工厂包装、光盘印图案等工作了。
OEM版:
厂商定制版。
EVAL版:
评估版。就是有30或者60天等使用期限的版本。
RTL版:
Retail.(零售版),这个版本就是真正发售的版本,有漂亮的包装、光盘、说明书等东西和高昂的价格。
关于版本的扩展小知识(了解即可)
八.MySQL数据库软件命名介绍
例如,像mysql-5.7..tar.gz 的版本号解释:
>. 第1个数字()是主版本号,描述了文件格式。所有版本5发行都有相同文件格式
>. 第2个数字(7)是发行级别。主版本号和发行级别组合到一起便构成了发型序列号。
>. 第3个数字(16)是在此系列的版本号,随每个新分发递增,通常你需要已经选择的发行(release)的最新版本
>. 后缀显示发行的稳定级别,通过一系列后缀显示如何改进稳定性,可能的后缀有:*alpha版.
九.MySQL版本选择最终建议
企业生产场景选择MySQL数据库建议:
>. 稳定版:选择开源的社区版的稳定版GA版本
>. 产品线:可以选择5.1或5. 互联网公司主流5.,其次是5.1和5.
>. 选择MySQL数据库GA版发布后6个月以上的GA版本。 (让别人先去帮你实验,等别人使用了半年左右发现稳定了再去使用,如果你不是数据库大牛的建议不要选择最新的!)
>.要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本 (选择的时候还要看是否频繁的更新发布版本,如果每个月都更新的话说明是有问题的,建议这连续的版本都不要选择,都存在风险!)
>.最好向后较长时间没有更新发布的版本
>.要考虑开发人员开发程序使用的版本是否兼容你选的版本 (因为是先有程序再有公司才会请运维的,他们开发的程序以及确定好了数据库的版本啦!)
>.作为内部开发人员开发测试数据库环境,跑大概3-6个月的事件
>.优先企业非核心业务采用新版本的数据库GA版本软件
>.向DBA高手请教,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过的好用的GA版本产品
>.经过上述工序之后,若是没有重要的功能BUG或性能瓶颈,则可以开始考虑作为任何任务数据服务的后端数据库件。
十.关系型数据库的常见组件
数据库:database 表:table
行:row
列:column 索引:index 视图:view 用户:user 权限:privilege 存储过程:procedure 存储函数:function 触发器:trigger 事件调度器:event scheduler,任务计划
十一.SQL语言的兴起与语法标准
1970年6月,IBM的研究员 Edgar Frank Codd发表了名为"A Relation Model of Data for Large Shared Data Banks"的论文,推出了关系模型的概念,奠定了关系模型的理论基础。 1976年,IBM实验室System R项目,通过实现数据结果和操作来证明关系模型实用性,并直接产生了结构化查询语言SQL。 20世纪70年代,IBM开发出SQL,用于DB2
1981年,IBM推出SQL/DS数据库
业内标准微软和Sybase的T-SQL,Oracle的PL/SQL
SQL作为关系型数据库所使用的标准语言,最初是基于IBM的实现在1986年被批准的。1987年,“国际标准化组织(ISO)”把ANSI(美国国家标准化组织) SQL作为国际标准。
SQL:ANSI SQL
SQL-, SQL-, SQL-, SQL-, SQL-
SQL-, SQL-
十二.SQL语言规范
1.在数据库系统中,SQL语句不区分大小写(建议用大写) 2.SQL语句可单行或多行书写,以“;”结尾 3.关键词不能跨多行或简写 4.用空格和缩进来提高语句的可读性 5.子句通常位于独立行,便于编辑,提高可读性 6.注释:
SQL标准:
/*注释内容*/ 多行注释
-- 注释内容 单行注释,注意有空格
MySQL注释:
#
7.命名规范
必须以字母开头
可以使用数字、#、$和_
不可使用关键字
十三.数据库对象
数据库的组件(对象):
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等
命名规则:
1.必须以字母开头
2.可包括数字和三个特殊字符(# _ $)
3.不要使用MySQL的保留字
4.同一database(Schema)下的对象不能同名
十四.SQL语句分类
SQL是结构化查询语言Structured Query Language。1987年被ISO组织标准化。所有主流的关系型数据库都支持SQL,NoSQL也有很大一部分支持SQL。 SQL语句分为以下几种类型:
DDL: Data Defination Language(数据定义语言)
负责数据库定义、数据库对象定义,由CREATE、ALTER与DROP三种语句组成。
DML: Data Manipulation Language(数据操纵语言)
负责对数据对象的操作,由INSERT,DELETE,UPDATE三种语句组成 DCL:Data Control Language(数据控制语言)
负责数据库权限访问控制,由GRANT,REVOKE两种指令组成。 TCL: Transaction Control Language(事物控制语言)
负责处理ACID十五,支持COMMIT,ROLLBACK指令。 DQL:Data Query Language(数据查询语言)
由SELECT指令组成。
十五.SELECT语句(单表操作)执行流程
-- 单表较为复杂的语句
SELECT #第四步执行
emp_no,
avg(salary) AS avg_salary
FROM #第一步执行
salaries
WHERE #第二步执行
salary > 70000
GROUP BY #第三步执行
emp_no
HAVING #第五步执行
avg(salary) > 50000
ORDER BY #第六步执行
avg_salary DESC
LIMIT 1; #第七步执行