欢迎来到至成科技_西安服务器托管_西安服务器租用_西安域名注册
 售前免费咨询专线02989390727
时间:2015-04-03  来源:至成科技  作者:至成科技  点击次数:1745

1.4. MySQL数据库管理系统概述

MySQL是较流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。

在MySQL的网站(http://www.mysql.com/)上,给出了关于MySQL和MySQL的较新信息。

·         MySQL是一种数据库管理系统。

数据库是数据的结构化集合。它可以是任何东西,从简单的购物清单到画展,或企业网络中的海量信息。要想将数据添加到数据库,或访问、处理计算机数据库中保存的数据,需要使用数据库管理系统,如MySQL服务器。计算机是处理大量数据的理想工具,因此,数据库管理系统在计算方面扮演着关键的中心角色,或是作为独立的实用工具,或是作为其他应用程序的组成部分。

  • MySQL是一种关联数据库管理系统。

    关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大的仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL指得是“结构化查询语言”。SQL是用于访问数据库的较常用标准化语言,它是由ANSI/ISO SQL标准定义的。SQL标准自1986年以来不断演化发展,有数种版本。在本手册中,“SQL-92”指得是1992年发布的标准,“SQL:1999”指得是1999年发布的标准,“SQL:2003”指得是标准的当前版本。我们采用术语“SQL标准”标示SQL标准的当前版本。

  • MySQL软件是一种开放源码软件。

    “开放源码”意味着任何人都能使用和改变软件。任何人都能从Internet下载MySQL软件,而无需支付任何费用。如果愿意,你可以研究源码并进行恰当的更改,以满足你自己的需求。MySQL软件采用了GPL(GNU通用公共许可证),http://www.fsf.org/licenses/,定义了在不同情况下可以用软件作的事和不可作的事。如果你对GPL不满意,或需要在商业应用程序中嵌入MySQL代码,可从我方购买商业许可版本。

  • MySQL数据库服务器具有快速、和易于使用的特点。

    如果它正是你所寻找的,不妨一试。MySQL服务器还有一套实用的特性集合,这些特性是通过与我们用户的密切合作而开发的。在我们的基准测试主页上,给出了MySQL服务器和其他数据库管理器的比较结果。

    MySQL服务器较初是为处理大型数据库而开发的,与已有的解决方案相比,它的速度更快,多年以来,它已成功用于众多要求很高的生产环境。尽管MySQL始终在不断发展,但目前MySQL服务器已能提供丰富和有用的功能。它具有良好的连通性、速度和安全性,这使的MySQL十分适合于访问Internet上的数据库。

  • MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。

    MySQL数据库软件是一种客户端/服务器系统,由支持不同后端的1个多线程SQL服务器,数种不同的客户端程序和库,众多管理工具和广泛的应用编程接口API组成。

    我们还能以嵌入式多线程库的形式提供MySQL服务器,你可以将其链接到你的应用程序,从而获得更小、更快、和更易管理的产品。

  • 有大量可用的共享MySQL软件。

    你所喜欢的应用程序和语言均支持MySQL数据库服务器,这种情况十分可能。

MySQL”的正式发音是“My Ess Que Ell”(而不是“my sequel”),但我们并不介意你的发音方式是“my sequel”或其他当地方式。

1.4.1. MySQL的历史

我们较初的出发点是,使用mSQL来连接我们的表,这类表采用了我们的快速0层面(ISAM)子程序。然而,经过一些测试后,我们得出结论,mSQL的速度或灵活性不足以满足我们的要求。其结果是,为我们的数据库提供了新的SQL接口,但API接口与mSQL的几乎一样。设计该API的目的在于,允许将为mSQL编写的第三方代码方便地移植到MySQL。

MySQL名称的起源不明。10多年来,我们的基本目录以及大量库和工具均采用了前缀“my”。不过,共同创办人Monty Widenius的女儿名字也叫“My”。时至今日,MySQL名称的起源仍是一个迷,即使对我们也一样。

MySQL Dolphin(我方徽标)的名称为“Sakila”,它是由MySQL AB公司的创办人从用户在“Dolphin命名”比赛中提供的众多建议中选定的。该名称是由来自非洲斯威士兰的开放源码软件开发人Ambrose Twebaze提出的。根据Ambrose的说法,按斯威士兰的本地语言,女性化名称Sakila源自SiSwati。Sakila也是坦桑尼亚、Arusha地区的一个镇的镇名,靠近Ambrose的母国乌干达。

1.4.2. MySQL的的主要特性

下面介绍了MySQL数据库软件的一些重要特性。关于当前特性和即将提供特性的更多信息。

·       内部构件和可移植性

o        使用C和C++编写

o        用众多不同的编译器进行了测试

o        能够工作在众多不同的平台上。

o        使用GNU Automake、Autoconf和Libtool进行移植。

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

o        采用核心线程的有效多线程 如果有多个CPU,它能方便地使用这些CPU。

o        提供了事务性和非事务性存储引擎。

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

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

o        极快的基于线程的内存分配系统。

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

o        存储器中的哈希表用作临时表。

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

o        采用Purify(商业内存溢出检测器)以及GPL工具Valgrind测试了MySQL代码。

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

  • 列类型

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

    • 定长和可变长度记录。

  • 语句和函数

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

      mysql> SELECT CONCAT(first_name, ' ', last_name) -> FROM citizen -> WHERE income/dependents > 10000 AND age > 30; 
    • 对SQL GROUP BY和ORDER BY子句的支持。支持聚合函数(COUNT(), COUNT(DISTINCT ...),AVG(),STD(),SUM(),MAX(),MIN()和GROUP_CONCAT())。

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

    • 按照标准SQL的要求,支持表别名和列别名。

    • DELETE、INSERT、REPLACE和UPDATE返回更改(影响)的行数。连接到服务器时,可通过设置标志返回匹配的行数。

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

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

    • 可以将不同数据库的表混合在相同的查询中(就像MySQL 3.22中那样)。

  • 安全

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

  • 可伸缩性和限制

    • 处理大型数据库: 我们使用了MySQL服务器和含5千万条记录的数据库。我们还听说,有些用户将MySQL用于含60000个表和约50亿行的数据库。

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

  • 连接性

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

    • 在MySQL 4.1和更高的版本中,如果是以“--shared-memory”选项开始,Windows服务器还支持共享内存连接。客户端可使用“--protocol=memory”选项,通过共享内存建立连接。

    • Connector/ODBC (MyODBC)接口为使用ODBC(开放式数据库连接性)连接的客户端程序提供了MySQL支持。例如,可以使用MS Access连接到你的MySQL服务器。客户端可运行在Windows或Unix平台上。提供了MyODBC源。支持所有的ODBC 2.5函数,以及众多其他函数。

    • Connector/J接口为使用JDBC连接的Java客户端程序提供了MySQL支持。客户端可运行在Windows或Unix平台上。提供了Connector/J源码。

  • 本地化

    • 服务器可使用多种语言向客户端提供错误消息。

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

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

    • 分类是根据所选的字符集(默认情况下,使用瑞典校对)进行的。启动MySQL服务器时,可更改该项设置。要想查看高级分类的示例,请参见Czech分类代码。MySQL服务器支持众多不同的字符集,这类字符集可在编译时和运行时指定。

  • 客户端和工具

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

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

1.4.3. MySQL稳定性

本节回答了如下问题:“MySQL服务器有多稳定?”,以及“在本项目中我能依靠MySQL服务器吗”? 我们将尝试阐明这类问题,并回答很多潜在用户关心的某些重要问题。本节所给出的信息基于通过邮件列表收集的数据,在确定问题和通报使用类型方面,邮件列表十分有用。

较初的代码可回溯至20世纪80年代初。它提供了稳定的编码基数,较初存储引擎使用的ISAM表格式仍保持向后兼容性。在MySQL AB公司的前身TcX,自1996年中期以来,MySQL代码在多个项目中工作良好,未出现任何问题。当MySQL数据库软件首次向更广泛的公众发布时,我们的用户很快发现了一些未经测试的代码段。自那以后,尽管每个新版本具有很多新的特性,但每次新发布的版本均存在少量的移植性问题。

每次发布的MySQL服务器均是可用的。仅当用户尝试源自“灰色区域”的代码时才会出现问题。当然,新用户不了解“灰色区域”是什么。因此,在本节中,我们介绍了目前已知的这类区域。本节所作的介绍主要针对MySQL服务器3.23版和更高版本。在较新的版本中,更正了所有已知和通报的缺陷,但“缺陷”一节所列的除外,这类缺陷与设计有关。

MySQL服务器采用了多层设计和独立模块。在此列出了一些较新的模块,并指明了它们的测试情况。

·         Replication(稳定)

大量使用复制功能的服务器均处于生产模式下,结果良好。在MySQL 5.x中,将继续增强复制功能。

·         InnoDB表(稳定)

自3.23.49版以来,InnoDB事务存储引擎一直很稳定。InnoDB正用于大型、重负荷生产系统。

·         BDB表(稳定)

Berkeley DB码十分稳定,但在MySQL服务器中,我们仍在改进BDB事务存储引擎。

·         全文本搜索(稳定)

全文本搜索的使用范围十分广泛。在MySQL 4.0和4.1中,增加了重要的特性增强。

·         MyODBC 3.51(稳定)

MyODBC 3.51采用了ODBC SDK 3.51,并广泛用于生产活动中。某些出现的情况看上去与应用程序相关,与ODBC驱动程序或底层数据库服务器无关。

1.4.4. MySQL表较大能达到多少

MySQL 3.22限制的表大小为4GB。由于在MySQL 3.23中使用了MyISAM存储引擎,较大表尺寸增加到了65536TB(2567 – 1字节)。由于允许的表尺寸更大,MySQL数据库的较大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。

InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的较大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的较大容量为64TB。

在下面的表格中,列出了一些关于操作系统文件大小限制的示例。这仅是初步指南,并不是较终的。要想了解较新信息,请参阅关于操作系统的文档。

操作系统

文件大小限制

Linux 2.2-Intel 32-bit

2GB (LFS: 4GB)

Linux 2.4+

(using ext3 filesystem) 4TB

Solaris 9/10

16TB

NetWare w/NSS filesystem

8TB

win32 w/ FAT/FAT32

2GB/4GB

win32 w/ NTFS

2TB(可能更大)

MacOS X w/ HFS+

2TB

在Linux 2.2平台下,通过使用对ext2文件系统的大文件支持(LFS)补丁,可以获得超过2GB的MyISAM表。在Linux 2.4平台下,存在针对ReiserFS的补丁,可支持大文件(高达2TB)。目前发布的大多数Linux版本均基于2.4内核,包含所有所需的LFS补丁。使用JFS和XFS,petabyte(千兆兆)和更大的文件也能在Linux上实现。然而,较大可用的文件容量仍取决于多项因素,其中之一就是用于存储MySQL表的文件系统。

关于Linux中LFS的详细介绍,请参见Andreas Jaeger的“Linux中的大文件支持”页面:http://www.suse.de/~aj/linux_lfs.html

Windows用户请注意: FAT和VFAT (FAT32)不适合MySQL的生产使用。应使用NTFS。

在默认情况下,MySQL创建的MyISAM表允许的较大尺寸为4GB。你可以使用SHOW TABLE STATUS语句或myisamchk -dv tbl_name检查表的较大尺寸。

如果需要使用大于4GB的MyISAM表(而且你的操作系统支持大文件),可使用允许AVG_ROW_LENGTH和MAX_ROWS选项的CREATE TABLE语句。创建了表后,也可以使用ALTER TABLE更改这些选项,以增加表的较大允许容量。

处理MyISAM表文件大小的其他方式:

·         如果你的大表是只读的,可使用myisampack压缩它。myisampack通常能将表压缩至少50%,因而,从结果上看,可获得更大的表。此外,myisampack还能将多个表合并为1个表。

·         MySQL包含一个允许处理MyISAM表集合的MERGE库,这类MyISAM表具有与单个MERGE表相同的结构。

1.4.5. 2000年兼容性

MySQL服务器本身不存在2000年(Y2K)兼容性问题:

·         MySQL服务器采用了Unix的时间功能,对于TIMESTAMP值,可处理的日期至2037年。对于DATE和DATETIME值,可接受的日期可至9999年。

·         所有的MySQL日期函数均是在1个源文件sql/time.cc中实现的,并经过了恰当编码以2000年安全。

·         在MySQL 3.22和以后的版本中,YEAR列类型能够在1个字节内保存0年以及1901~2155年,并能使用两位或四位数字显示它们。所有的两位数字年份均被视为介于1970~2069年之间,这意味着,如果你在YEAR列中保存了01,MySQL服务器会将其当作2001年。

通过下面的简单演示示例,表明MySQL服务器在处理直至9999年的DATE或DATETIME值方面不存在问题,在处理2030年以前的TIMESTAMP值方面也不存在问题:

mysql> DROP TABLE IF EXISTS y2k;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE y2k (date DATE,
    ->                   date_time DATETIME,
    ->                   time_stamp TIMESTAMP);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO y2k VALUES
    -> ('1998-12-31','1998-12-31 23:59:59',19981231235959),
    -> ('1999-01-01','1999-01-01 00:00:00',19990101000000),
    -> ('1999-09-09','1999-09-09 23:59:59',19990909235959),
    -> ('2000-01-01','2000-01-01 00:00:00',20000101000000),
    -> ('2000-02-28','2000-02-28 00:00:00',20000228000000),
    -> ('2000-02-29','2000-02-29 00:00:00',20000229000000),
    -> ('2000-03-01','2000-03-01 00:00:00',20000301000000),
    -> ('2000-12-31','2000-12-31 23:59:59',20001231235959),
    -> ('2001-01-01','2001-01-01 00:00:00',20010101000000),
    -> ('2004-12-31','2004-12-31 23:59:59',20041231235959),
    -> ('2005-01-01','2005-01-01 00:00:00',20050101000000),
    -> ('2030-01-01','2030-01-01 00:00:00',20300101000000),
    -> ('2040-01-01','2040-01-01 00:00:00',20400101000000),
    -> ('9999-12-31','9999-12-31 23:59:59',99991231235959);
Query OK, 14 rows affected (0.01 sec)
Records: 14  Duplicates: 0  Warnings: 2
 
mysql> SELECT * FROM y2k;
+------------+---------------------+----------------+
| date       | date_time           | time_stamp     |
+------------+---------------------+----------------+
| 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 |
| 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 |
| 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 |
| 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 |
| 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 |
| 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 |
| 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 |
| 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 |
| 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 |
| 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 |
| 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 |
| 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |
| 2040-01-01 | 2040-01-01 00:00:00 | 00000000000000 |
| 9999-12-31 | 9999-12-31 23:59:59 | 00000000000000 |
+------------+---------------------+----------------+
14 rows in set (0.00 sec)

较后2个TIMESTAMP列的值为0,这是因为年份值(2040,9999)超出了TIMESTAMP的较大范围。TIMESTAMP数据类型用于保存当前时间,在32位机器上,支持的取值范围是19700101000000~20300101000000(带符号值)。在64位机器上,TIMESTAMP能处理的值达2106(无符号值)。

尽管MySQL服务器本身不存在2000年安全问题,但如果使用了存在Y2K问题的应用程序,也会遇到问题。例如,很多早期的应用程序采用2位数值(两可性)而不是4位数值来保存和处理年份数据。这类问题可能会被使用“00”或“99”的应用程序合并为“丢失”值指示符。很不幸,这类问题或许很难更正,这是因为不同的应用程序是由不同的程序员编写的,每位程序员可能使用了不同的惯例集和日期处理函数。

因此,尽管MySQL服务器不存在Y2K问题,但应用程序须提供无歧义的输入值。

		

以上内容由至成科技(西安服务器托管,西安服务器租用)为您提供,更多精彩内容:http://www.zcitidc.com/

关注“至成科技”微信公众号,快速获取互联网较新资讯

西安网站建设-至成科技光放微信
陕西本土非营利性IDC互联网接入商/  Shanxi Local nonprofit IDC Internet access provider

公司地址:西安市经开区凤城四路西安国际企业中心B座23层06-10室

7*24小时售前咨询电话:02989390727

7*24小时售后服务电话:02989390727

《中华人民共和国增值电信业务经营许可证》陕B1.B2-20140011  陕ICP备12008874-2  © 2012-2024 ZCITIDC,Inc.

通信地址:西安市经开区凤城四路西安国际企业中心B座23层06-10室  邮政编码:710016

域名合作伙伴:新网互联软件服务有限公司

  • 西安服务器租用
  • 西安域名注册
  • 西安云主机
  • 西安VPS主机
  • 西安网站托管