MySQL数据库扫盲篇

            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.
0,Solaris版本,Linux版本。   1999年:
    MySQL AB公司,瑞典。   2003年:
    MySQL
5.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 具有许多吸引人之处:     
1.速度:
        MySQL 运行速度很快。开发者声称 MySQL 可能是目前能得到的最快的数据库。可访问 http://www.mysql.com/benchmark.html (MySQL Web 站点上的性能比较页),调查一下这个性能。     2.容易使用:
        MySQL 是一个高性能且相对简单的数据库系统,与一些更大系统的设置和管理相比,其复杂程度较低。     
3.价格:
        MySQL 对多数个人用户来说是免费的。     
4.小巧:
        4.1.1的数据库发行版仅仅只有21M,安装完成也仅仅51M。     5.支持查询语言:
        MySQL 可以利用 SQL(结构化查询语言),SQL 是一种所有现代数据库系统都选用的语言。也可以利用支持 ODBC(开放式数据库连接)的应用程序,ODBC 是 Microsoft 开发的一种数据库通信协议。     
6.性能:
        许多客户机可同时连接到服务器。MySQL数据库没有用户数的限制,多个客户机可同时使用同一个数据库。可利用几个输入查询并查看结果的界面来交互 式地访问 MySQL。这些界面为:命令行客户机程序、Web 浏览器或 X  Window System 客户机程序。此外,还有由各种语言(如C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl)编写的界面。因此,可以选择使用已编好的客户机程序或编写自己的客户机应用程序。     7.连接性和安全性:
        MySQL 是完全网络化的,其数据库可在因特网上的任何地方访问,因此,可以和任何地方的任何人共享数据库。而且 MySQL 还能进行访问控制,可以控制哪些人不能看到您的数据。     
8.可移植性:
        MySQL 可运行在各种版本的 UNIX 以及其他非 UNIX 的系统(如 Windows 和 OS/2)上。MySQL 可运行在从家用 PC 到高级的服务器上。     9.开放式的分发:
        MySQL容易获得;只要使用Web浏览器即可。如果不能理解某样东西是如何起作用的,或者对某个算法感到好奇,可以将其源代码取来,对源代码进行分析。如果不喜欢某些东西,则可以更改它。

5>.MySQL社区版与MySQL企业版区别

  如果仅仅是从学习角度,直接使用社区版就可以了,两者没有本质区别。只有在需要官方的商业服务的时候才会看出很大区别。

  主要的区别有以下两点。     
1.企业版只包含稳定之后的功能,社区版包含所有Mysql的最新功能。 也就是说,社区版是企业版的测试版,但是,前者的功能要比后者多。     2.官方的支持服务只针对企业版,用户在使用社区版时出现任何问题,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.0

2>.MySQL Cluster

  基于MySQL数据库而实现的集群服务,自身能提供高并发,高负载等特性。

3>.MyzSQL Fabric MySQL

  官方提供的关于MySQL数据库高可用和数据分片的解决方案。

4>.MySQL Connectors

  为应用程序提供JDBC/ODBC等访问MySQL数据库的接口服务。

五.MySQL Community Server各版本主要区别

1>.MySQL4.0版本

  增加了子查询的支持,字符集增加UTF-8,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.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.16.tar.gz 的版本号解释: 
  1>. 第1个数字(5)是主版本号,描述了文件格式。所有版本5发行都有相同文件格式 
  2>. 第2个数字(7)是发行级别。主版本号和发行级别组合到一起便构成了发型序列号。 
  3>. 第3个数字(16)是在此系列的版本号,随每个新分发递增,通常你需要已经选择的发行(release)的最新版本 
  4>. 后缀显示发行的稳定级别,通过一系列后缀显示如何改进稳定性,可能的后缀有:*alpha版.

九.MySQL版本选择最终建议 

企业生产场景选择MySQL数据库建议: 
  1>. 稳定版:选择开源的社区版的稳定版GA版本 
  2>. 产品线:可以选择5.1或5.5 互联网公司主流5.5,其次是5.1和5.6 
  3>. 选择MySQL数据库GA版发布后6个月以上的GA版本。 (让别人先去帮你实验,等别人使用了半年左右发现稳定了再去使用,如果你不是数据库大牛的建议不要选择最新的!)
  4>.要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本 (选择的时候还要看是否频繁的更新发布版本,如果每个月都更新的话说明是有问题的,建议这连续的版本都不要选择,都存在风险!)
  5>.最好向后较长时间没有更新发布的版本 
  6>.要考虑开发人员开发程序使用的版本是否兼容你选的版本 (因为是先有程序再有公司才会请运维的,他们开发的程序以及确定好了数据库的版本啦!)
  7>.作为内部开发人员开发测试数据库环境,跑大概3-6个月的事件 
  8>.优先企业非核心业务采用新版本的数据库GA版本软件 
  9>.向DBA高手请教,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过的好用的GA版本产品
  10>.经过上述工序之后,若是没有重要的功能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
-1986, SQL-1989, SQL-1992, SQL-1999, SQL-2003   SQL-2008, SQL-2011

十二.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;    #第七步执行
原文地址:https://www.cnblogs.com/yinzhengjie/p/11732882.html