首页 > 数据库 >MySQL笔记01: MySQL入门_1.1 MySQL概述

MySQL笔记01: MySQL入门_1.1 MySQL概述

时间:2023-01-17 22:22:59浏览次数:45  
标签:存储 01 1.1 数据库 使用 引擎 版本 MySQL

1.1 MySQL概述

MySQL是一个关系数据库管理系统(Relational DataBase Management System,RDBMS)。它是一个程序,可以存储大量的种类繁多的数据,并且提供服务以满足任何组织的需要。与MySQL同属于RDBMS的还有著名的Oracle、SQL Server和DB2。

  1.1.1 MySQL发展历史

MySQL的历史最早可以追溯到1979年,当时有一个名叫Monty Widenius的程序员在名为TcX的小公司打工,并且使用BASIC设计了一个报表工具,使其可以在4MB主频和16KB内存的计算机上运行。没过多久,Monty又将此工具用C语言进行了重写并移植到了UNIX平台。当时,这只是一个很底层的且仅面向报表的存储引擎,名叫Unireg。

1985年,瑞典几位志同道合的年轻人(以David Axmark为首)成立了一家公司,这就是MySQL AB 的前身。这个公司最初并不是为了开发数据库产品,而是在实现他们想法的过程中,需要一个数据库。他们希望能够使用开源的产品。但在当时并没有一个合适的选择,那就只能自己开发了。

在最初,他们只是自己设计了一个利用索引顺序存取数据的方法,也就是I S A M(Indexed Sequential Access Method)存储引擎核心算法的前身,利用ISAM结合mSQL来实现他们的应用需求。在系统使用过程中,随着数据量越来越大,系统复杂度越来越高,ISAM和mSQL的组合逐渐不堪重负。在分析性能瓶颈之后,他们发现问题出在mSQL上面。不得已,他们抛弃了mSQL,重新开发了一套功能类似的数据存储引擎,这就是ISAM 存储引擎。

1990年,TcX公司的客户中开始有人要求为他的API提供SQL支持。当时有人提议直接使用商用数据库,但是Monty觉得商用数据库的速度难以令人满意。于是,他直接借助于MySQL的代码,将它集成到自己的存储引擎中。令人失望的是,效果并不太令人满意,于是,Monty决心自己重写一个SQL支持。

1996年,MySQL 1.0版本发布,可以在小范围内使用。到了1996年10月,MySQL 3.11.1版本发布,没有2.x版本,最开始只提供了Solaris下的二进制版本。一个月后,Linux版本出现了。这时的MySQL还非常简陋,除了在一个表上做一些INSERT、UPDATE、DELETE和SELECT操作外,没有其他更多的功能。

紧接下来的两年里,MySQL被依次移植到各个平台。它在发布时采用的许可策略有些与众不同:允许免费使用,但是不能将MySQL与自己的产品绑定在一起发布。如果想一起发布,就必须使用特殊许可,这就意味着用户要“付费”。这种特殊许可为MySQL带来了一些收入,从而为它的持续发展提供了物质基础。

MySQL关系型数据库于1998年1月发行第一个版本。它使用系统核心的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(API)。支持多种字段类型,并提供了完整的操作符支持。

1999—2000年,MySQL AB公司在瑞典成立。Monty与Sleepycat合作开发出了Berkeley DB(简称为BDB)引擎,由于BDB支持事务处理,所以MySQL从此开始支持事务处理了。

2000年的时候,MySQL公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源世界。2000年4月,MySQL对旧的存储引擎ISAM进行了整理,将其命名为MyISAM。

2001年,Heikiki Tuuri向MySQL提出建议,希望能集成他们的存储引擎InnoDB,这个引擎同样支持事务处理,还支持行级锁。所以在2001年发布的3.23版本的时候,该版本已经支持大多数的基本的SQL操作,而且还集成了MyISAM和InnoDB存储引擎。MySQL与InnoDB的正式结合版本是4.0。

2004年10月,发布了经典的4.1版本。

2005年10月,有发布了里程碑的一个版本,MySQL 5.0 在5.0中加入了游标、存储过程、触发器、视图和事务的支持。在5.0之后的版本里,MySQL明确地表现出迈向高性能数据库的发展步伐。

2008年1月,MySQL AB公司被Sun公司以10亿美金收购,MySQL数据库进入Sun时代。在Sun时代,Sun公司对其进行了大量的推广、优化和Bug修复等工作。

2008年11月,MySQL 5.1发布,它提供了分区、事件管理,以及基于行的复制和基于磁盘的NDB集群系统,同时修复了大量的Bug。

2009年4月,甲骨文以74亿美元收购Sun公司,自此MySQL数据库进入Oracle时代,而其第三方的存储引擎InnoDB早在2005年就被甲骨文收购。

2010年12月,MySQL 5.5发布,其主要新特性包括半同步的复制及对SIGNAL/RESIGNAL的异常处理功能的支持,最重要的是InnoDB存储引擎终于变为当前MySQL的默认存储引擎。MySQL 5.5不是时隔两年后的一次简单的版本更新,而是加强了MySQL各个方面在企业级的特性。甲骨文公司同时也承诺MySQL 5.5和未来版本仍是采用GPL授权的开源产品。

 

  1.1.2 MySQL主要特性

下面列出了MySQL数据库的一些主要特性。

(1)内部构件和可移植性。

(2)使用C和C++编写。

(3)用众多不同的编译器进行了测试。

(4)能够工作在众多不同的平台上。

(5)使用GNU Automake、Autoconf和Libtool进行移植。

(6)提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl的API。

(7)采用核心线程的完全多线程,如果有多个CPU,它能方便地使用这些CPU。

(8)提供了事务性和非事务性存储引擎。

(9)使用了极快的“B树”磁盘表(MyISAM)和索引压缩。

(10)添加另一个存储引擎相对简单。如果打算为内部数据库添加一个SQL接口,该特性十分有用。

(11)极快的基于线程的内存分配系统。

(12)通过使用优化的“单扫描多连接”,能实现极快的连接。

(13)存储器中的哈希表用作临时表。

(14)SQL函数是使用高度优化的类库实现的,运行很快。通常,在完成查询初始化后,不存在存储器分配。

(15)服务器可作为单独程序运行在客户/服务器联网环境下。它也可作为库提供,可嵌入(链接)到独立的应用程序中。这类应用程序可单独使用,也能在网络环境下使用。

(16)众多类型:

带符号/无符号整数,1、2、3、4、8字节长,FLOAT,DOUBLE,CHAR,VARCHAR,TEXT,BLOB,DATE,TIME,DATETIME,TIMESTAMP,YEAR,SET,ENUM,以及OpenGIS空间类型。

(17)在SELECT查询的WHERE子句中,提供完整的操作符和函数支持。例如:

mysql> SELECT CONCAT(first_name, ' ', last_name)
        -> FROM citizen
        -> WHERE income/dependents > 10000 AND age > 30;

 

(18)对SQL GROUP BY和ORDER BY子句的全面支持。支持聚合函数COUNT(),COUNT(),AVG(),STD(),SUM(),MAX()和MIN()等。

(19)支持LEFT OUTER JOIN和RIGHT OUTER JOIN,采用标准的SQL和ODBC语法。

(20)MySQL的SHOW命令可用于检索关于数据库、数据库引擎、表和索引的信息。EXPLAIN命令可用于确定优化器处理查询的方式。

(21)函数名与表名或列名不冲突。例如,ABS是有效的列名。唯一的限制在于,调用函数时,函数名和随后的符号“(”之间不得有空格。

(22)十分灵活和安全的权限和密码系统,允许基于主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码安全。

(23)处理大型数据库:

有用户使用MySQL服务器包含5千万条记录的数据库,有些用户将MySQL用于包含60000个表和约50亿行的数据库。

(24)每个表可支持高达64条索引(在MySQL 4.1.2之前为32条)。每条索引可由1~16个列或列元素组成。最大索引宽度为1000字节(在MySQL 4.1.2之前为500)。索引可使用具备CHAR、VARCHAR、BLOB或TEXT列类型的列前缀。

(25)在任何平台上,客户端可使用TCP/IP协议连接到MySQL服务器。在Windows系统的NT系列中(NT、2000、XP或2003),客户端可使用命名管道进行连接。在UNIX系统中,客户端可使用UNIX域套接字文件建立连接。

(26)对数种不同字符集的全面支持,包括latin1(cp1252)、german、big5、ujis等。例如,在表名和列名中允许使用斯堪的纳维亚字符‘å’、‘ä’和‘ö’。从MySQL 4.1开始,提供了Unicode支持。

(27)所有数据均以所选的字符集保存。正常字符串列的比较不区分大小写。

(28)MySQL服务器提供了对SQL语句的内部支持,可用于检查、优化和修复表。通过mysqlcheck客户端,可在命令行上使用这类语句。MySQL还包括myisamchk,这是一种很快的命令行实用工具,可用于在MyISAM表上执行这类操作。

(29)对于所有MySQL程序,均能通过“--help”或“-?”选项调用,以获取联机帮助信息。

 

  1.1.3 MySQL适用场景

目前,MySQL的使用用户已经达千万级别了,其中不乏企业级用户。可以说是目前最为流行的开源数据库管理系统软件了。任何产品都不可能是万能的,也不可能适用于所有的应用场景。下面列举了MySQL最常用到的4种场景。

1. Web网站系统

Web站点是MySQL最大的客户群,也是MySQL发展史上最为重要的支撑力量。MySQL之所以能成为Web站点开发者们最青睐的数据库管理系统,是因为MySQL数据库的安装和配置都非常简单,使用过程中的维护也不像很多大型商业数据库管理系统那么复杂,而且性能出色。还有一个非常重要的原因就是MySQL是开放源代码的,完全可以免费使用。

2. 日志记录系统

MySQL数据库的插入和查询性能都非常高效,如果设计得较好,在使用MyISAM存储引擎的时候,两者可以做到互不锁定,达到很高的并发性能。所以,对需要大量的插入和查询日志记录的系统来说,MySQL是非常不错的选择。比如处理用户的登录日志、操作日志等,都是非常适合的应用场景。

3. 数据仓库系统

随着现在数据仓库数据量的飞速增长,需要的存储空间越来越大。数据量的不断增长,使数据的统计分析变得越来越低效,也越来越困难。怎么办?这里有几个主要的解决思路,一个是采用昂贵的高性能主机以提高计算性能,用高端存储设备提高I/O性能,效果理想,但是成本非常高;第二个就是通过将数据复制到多台使用大容量硬盘的廉价服务器上,以提高整体计算性能和I/O能力,效果尚可,存储空间有一定限制,成本低廉;第三是通过将数据水平拆分,使用多台廉价的服务器和本地磁盘来存放数据,每台机器上面都只有所有数据的一部分,解决了数据量的问题,所有服务器一起并行计算,也解决了计算能力问题,通过中间代理程序调配各台机器的运算任务,既可以解决计算性能问题又可以解决I/O性能问题,成本也很低廉。

在上面的三个方案中,第二和第三个的实现MySQL都有较大的优势。通过MySQL的简单复制功能,可以很好地将数据从一台主机复制到另外一台,不仅在局域网内可以复制,在广域网同样可以。当然,很多人可能会说,其他的数据库同样也可以做到,不是只有MySQL有这样的功能。确实,很多数据库同样能做到,但是MySQL是免费的,其他数据库大多都是按照主机数量或者CPU数量来收费,当我们使用大量的服务器的时候,授权费用相当惊人。第一个方案,基本上所有数据库系统都能够实现,但是其高昂的成本并不是每一个公司都能够承担的。

4. 嵌入式系统

嵌入式环境对软件系统最大的限制是硬件资源非常有限,在嵌入式环境下运行的软件系统,必须是轻量级低消耗的软件。MySQL在资源使用方面的伸缩性非常大,可以在资源非常充裕的环境下运行,也可以在资源非常少的环境下正常运行。它对于嵌入式环境来说,是一种非常合适的数据库系统,而且MySQL有专门针对于嵌入式环境的版本。

 

  1.1.4 MySQL分支版本

在MySQL的发展中最初由MySQL AB公司开发,之后被Sun公司收购,再被Oracle公司收购。另外,由于MySQL开源代码的原因,市场上出现了很多MySQL的分支版本,其中最有代表性的三个,分别是Percona Server、MariaDB和Drizzle。

1. Percona Server

Percona Server是一个与MySQL向后兼容的替代品,它尽可能不改变SQL语法、客户/服务器协议和硬盘上的文件格式。任何运行在MySQL上的数据库都可以运行在Percona Server上而不需要修改。切换到Percona Server的方法也很简单,只需关闭MySQL和启动Percona Server即可,而不需要导出和重新导入数据,反之切换回去也不麻烦。

Percona Server包括Percona XtraDB存储引擎,即改进版本的InnoDB。这同样是一个向后兼容的替代品。例如,如果要创建一个使用InnoDB存储引擎的表,Percona Server能自动识别并用XtraDB替代之。

2. MariaDB

在Sun收购MySQL之后,MySQL的创建者之一Monty离开Sun公司,随后成立Monty公司创建了MariaDB。MariaDB的目标是社区开发,Bug修改和许多的新特性(特别是与社区开发的特性相集成)。

与Percona Server相比,MariaDB包括更多对服务器的扩展。例如,有许多是对查询优化和复制的改变。它使用Aria存储引擎取代了MyISAM来存储内部临时表。同时也包括很多社区的引擎,如SphinxSE和PBXT。

3. Drizzle

Drizzle是真正的MySQL分支,而非只是一个变种或者增强版本。它并不与MySQL兼容,尽管区分上还并不是太大。在许多场合并不能简单地将MySQL替换为Drizzle,因为后者对SQL语法的修改太大了。

Drizzle创建于2008年,致力于更好地服务MySQL用户。其创建目标是更好地满足网页应用的核心功能。与MySQL相比,它更加简单,选择更少。例如,只能使用utf8作为字符集,并且只有一个类型的BLOB,主要针对64位硬件编译,且支持IPv6网络等。

在代码层,Drizzle构建于一个精简内核和插件的微核心架构之上。服务器的核心比起MySQL已经精简许多。几乎任何东西都是以插件形式使用。Drizzle使用了诸如Boost的标准开源库,并遵从代码、架构和API方面的标准。

目前,Drizzle虽然已经在某些产品环境下部署但还没有广泛应用。Drizzle项目的理念是抛弃向后兼容的束缚,而这意味着相对于迁移一个已有的应用而言,它更适合新的应用开发。

 

 

标签:存储,01,1.1,数据库,使用,引擎,版本,MySQL
From: https://www.cnblogs.com/LaytonWang/p/17058812.html

相关文章

  • Day01-Python环境安装
    一、Python简介1、开源代码是公开的,任何人都可以去查看,修改以及使用。2、版本包括CPython(由C编写,把python编译成中间态的字节码,然后有虚拟机解释),Jthon(将python代码编译......
  • python操作mysql的库--Pymysql
    安装pipinstallpymysql安装json,用于加载json配置文件参数pipinstallsimplejson创建实验用表MariaDB[test]>createtablestudent(idintnotnullauto_......
  • P5020 [NOIP2018 提高组] 货币系统 题解
    注意:此题题解写的较为简略。P5020[NOIP2018提高组]货币系统转化为完全背包即可。#include<iostream>#include<cstring>#include<algorithm>usingnamespaces......
  • P1941 [NOIP2014 提高组] 飞扬的小鸟 题解
    WC-2023上的题目。线性动态规划P1941[NOIP2014提高组]飞扬的小鸟我们先不管障碍物。设\(f[i][j]\)表示来到点\((i,j)\)的最少点击屏幕数。因为每秒要不上升\(......
  • ESP-01S无线下载器
    文章结构: 项目概述成品预览项目框架硬件资料,代码项目槽点 -项目概述-最开始学习51的时候,总是“冷启动”,手动按动开关重启,下载一次程序重启一次,觉得很麻烦而......
  • MySQL8.0.21升级8.0.31
    一、停止systemctlstopmysqld.service二、下载8.0.31版本rpm包cd/tmpwgethttps://cdn.mysql.com/archives/mysql-8.0/mysql-community-common-8.0.31-1.el8.x86_64......
  • 2021-01-17
    写点什么呢!今天上班的第四天,来的时候寻思着日记本带着不方便,就留在书架上了,啊!!我真的烦,刚想着写点什么,我妈又和我姐在群里吵起来了。哈哈哈!!!还得我出面解决纷争。两个人一点都......
  • mysql查看、修改数据库字符集
    showVARIABLESlike'character%';character_set_client:客户端请求数据的字符集character_set_connection:客户机/服务器连接的字符集character_set_database:默认数据库的......
  • jdbc连接mysql简单实例,在java项目中添加数据库驱动包
    傻瓜式教学从创建项目,到数据库建立,访问一步到位打开eclipse,newjavaProject创建一个普通的java项目右击刚才新建的项目,选择BuildPath—>ConfigureBuilePath选择addExte......
  • linux 01
    目录今日内容详细linux常见岗位计算机的种类服务器品牌服务器内部组成服务器磁盘阵列linux发展史虚拟化技术虚拟化软件下载重要名词解释远程链接工具今日内容详细linux常......