• 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;    #第七步执行
  • 相关阅读:
    ubuntu1804隐藏顶部工作栏
    minilzo使用流程
    Linux内核设计与实现 总结笔记(第十六章)页高速缓存和页回写
    VS2015编译问题:模块对于 SAFESEH 映像是不安全的
    Linux内核设计与实现 总结笔记(第十五章)进程地址空间
    Linux内核设计与实现 总结笔记(第十四章)块I/O层
    Qt setStyleSheet
    Linux内核设计与实现 总结笔记(第十三章)虚拟文件系统
    Linux内核设计与实现 总结笔记(第十二章)内存管理
    Linux内核设计与实现 总结笔记(第十一章)定时器和时间管理
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/11732882.html
Copyright © 2020-2023  润新知