我一直从事Informix和Oracle数据库开发,有一天发现网络上有一种小巧别致的数据库,被广泛使用,从MySQL的网站http://www.mysql.com/我下载了它的数据库软件,使用过后觉得真的挺好,这是我的一点学习笔记希望对各位初学者有点帮助。
1. MySQL数据库介绍
MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统。MySQL 完全适用于网络,用其建造的数据库可在因特网上的任何地方访问,因此,可以和网络上任何地方的任何人共享数据库。MySQL具有功能强、使用简单、管理方便、运行速度快、可靠性高、安全保密性强等优点。MySQL用C和C++编写,它可以工作在许多平台(Unix,Linux,Windows)上,提供了针对不同编程语言(C,C++,JAVA等)的API函数;使用核心线程实现多线程,能够很好的支持多CPU;提供事务和非事务的存储机制;快速的基于线程的内存分配系统;MySQL采用双重许可,用户可以在GNU许可条款下以免费软件或开放源码软件的方式使用MySQL软件,也可以从MySQL AB公司获得正式的商业许可。
除了以上特点,MySQL 还有一个最大的特点,那就是在诸如 UNIX 这样的操作系统上,它是免费的,可从因特网上下载其服务器和客户机软件。并且还能从因特网上得到许多与其相配的第三方软件或工具。而在 Windows 系统上,其客户机程序和客户机程序库是免费的。
如果您正在寻找一种免费的或不昂贵的数据库管理系统,可以有几个选择,如,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 浏览器即可。如果不能理解某样东西是如何起作用的,或者对某个算法感到好奇,可以将其源代码取来,对源代码进行分析。如果不喜欢某些东西,则可以更改它。
1.2. MySQL 提供的工具
MySQL 包含有下列工具:
1. SQL 服务器。这是 MySQL 的引擎,它提供对数据库的访问。
2. 访问服务器的客户机程序。包括一个允许直接录入查询并查看结果的交互式程序,以及几个帮助操纵站点的管理程序和实用程序。其中有一个实用程序允许控制服务器。其他的实用程序导入或导出数据,检查访问许可等。
3. 帮助用户编写自己的程序的客户机库。MySQL提供众多的API ( C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl)
4. MySQL 除了提供内嵌软件外,它还被许多很有才能的人使用。这些人喜欢编写软件以提高其产品效率,或愿意将自己编写的软件提供给他人使用。因此,使用 MySQL能得到各种各样的第三方工具,这些工具令 MySQL使用更方便,或者扩展了 MySQL,使其进入诸如 Web 站点开发这样的领域。
1.3. MySQL 是否免费
MySQL 不是一种开放的源代码产品,但一般可以免费使用。可以参考“MySQL 参考指南”的许可说明,其基本内容如下:
1. 客户机程序和客户机编程库在所有平台上都是免费的。
2. 在 UNIX 和其他非 Windows 平台上,MySQL 服务器可免费使用,但不能出售它或出售需要它的任何软件或服务。如果这样做,应该得到服务器的使用许可证。理由是,如果用 MySQL 赚钱,那么应当分一些给MySQL 的开发者($495 对有助于您赚钱的专业的 RDBMS 来说是很便宜的,并且还有大量的免费软件,可用来帮助您更有效地使用 MySQL。)
3. MySQL 服务器的 Windows 版本需要许可证。目前MySQL Pro在网上的报价(注意MySQL Pro是MySQL的商业版本):
http://www.mysql.com/products/pricing.html
MySQL Pro includes the InnoDB transactional storage engine, which provides row-level locking.
Number of licenses
Price per copy
EUR
USD
GBP
1 .. 9
440.00
495.00
290.00
10 .. 49
315.00
360.00
205.00
50 .. 99
255.00
290.00
165.00
100 .. 249
195.00
220.00
127.00
250 .. 499
155.00
175.00
100.00
500 +
ask for quote, sales@mysql.com
Number of licenses | Price per copy | ||
EUR | USD | GBP | |
1 .. 9 | 440.00 | 495.00 | 290.00 |
10 .. 49 | 315.00 | 360.00 | 205.00 |
50 .. 99 | 255.00 | 290.00 | 165.00 |
100 .. 249 | 195.00 | 220.00 | 127.00 |
250 .. 499 | 155.00 | 175.00 | 100.00 |
500 + | ask for quote, sales@mysql.com |
4. MySQL 的较旧的版本通过 GNU Public License(GPL)许可证可以得到,并可用于任何用途而无需付费。MySQL 3.20.32a 在 GPL 条件下可用。
5. 无论是否需要服务器许可证,都可在付费的基础上从 MySQL 开发者那里得到正式的技术支持,本人提请读者注意这一点。(特别是如果您的公司主管不赞成使用没有如此保证的软件时更是如此。)MySQL提供多种级别的技术支持,除了得到极好的支持外,您还能帮助MySQL的开发,进而使整个MySQL世界受益。
6. 关于 Windows 许可证的说明
有时候有人会问,“我使用的是 Windows,为什么必须取得 MySQL 服务器的许可证呢?”这是一个很合理的问题,而且也存在一个合理的答案,那就是软件开发的费用。为了从事软件开发,需要一个操作系统和一些开发工具,如编辑器和编译器等。就这些需求而言,在 UNIX 的开发与 Windows 的开发之间存在根本的不同。在 UNIX 下,可免费得到几乎所有东西:
a) 使用的操作系统有几个选择,如 Linux 或免费的 BSD 系列,譬如 FreeBSD、NetBSD 和 OpenBSD。
b) 使用的开发工具,这些操作系统全都带有编辑器,如 vi 和编辑程序宏指令及 gcc 和 egcs 这样的编译器。
c) 在升级这些操作系统或发布开发工具时,可从因特网上下载它们或从一个便宜的 CD 上得到,即使是进行重大的修改也是这样。
而在 Windows 上开发软件却相当昂贵,例如:
a) 操作系统不是免费的。
b) 开发工具,如编译器不是免费的。
c) 操作系统或工具的升级时,除非是小问题的修改或作微小的升级,否则要再次付费。所有这些表明,UNIX 下的软件开发成本几乎是零,而在 Windows 其成本相当可观。MySQL 的开发者可能愿意继续研究 MySQL,但他们不希望为这种权利付那么多钱。不管怎么说,其 Windows 的开发成本必须收回,发售MySQL 许可证就是一种手段。
可以在网上下载的MySQL版本如下:
MySQL 4.0 -- Production release (recommended)
MySQL 4.1 -- Alpha release (use this for new development)
MySQL 5.0 -- Development tree (use this for previewing and testing new features)
MySQL 3.23 -- Older production release
各版本的主要特性:
Feature
MySQL version
Unions
4.0
Subqueries
4.1
R-trees
4.1 (for MyISAM tables)
Stored procedures
5.0
Views
5.0 or 5.1
Cursors
5.0
Foreign keys
5.1 (already implemented in 3.23 for InnoDB)
Triggers
5.1
Full outer join
5.1
Constraints
5.1
Feature | MySQL version |
Unions | 4.0 |
Subqueries | 4.1 |
R-trees | 4.1 (for MyISAM tables) |
Stored procedures | 5.0 |
Views | 5.0 or 5.1 |
Cursors | 5.0 |
Foreign keys | 5.1 (already implemented in 3.23 for InnoDB) |
Triggers | 5.1 |
Full outer join | 5.1 |
Constraints | 5.1 |
4.1版本MySQL支持子查询和SQL语句的预处理prepare方法,所以本报告测试主要针对4.1版本进行。
对于表的大小MySQL没有内部限制,仅仅受限于操作系统对表文件大小的限制,目前在Linux-Intel 32 bit上表最大为2GB,在Solaris 2.7上是512GB。实际应用中MySQL数据库处理拥有60000个表和五十亿条记录的数据库系统,表记录可以达到五百万条。
目前我们的OMCR数据库表只有134个,数据库记录还没有上百万的。
支持每个表32个索引,每个索引可以包含1-16个字段,最大字段长度为500个字节。
支持TCP/IP的sock连接,这样便于跨平台的数据库连接,同时还支持Windows下的命名管道连接、ODBC连接。同时MySQL服务器端对于接入用户数没有任何限制。
支持ISO-8859-1 (Latin1), german, big5, ujis字符集,我们目前采用的是ISO-8859-1字符集,
MySQL支持的可用于表的字段类型定义的数据类型有:signed/unsigned integers 1, 2, 3, 4, and 8 bytes long, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, and ENUM types可以分三种类型:数值类型,日期和时间类型,字符类型我们目前主要使用DECIMAL、VARCHAR2、DATE、TEXT和BLOB数据类型这些类型已经远远满足我们的需要,类型说明如下:
1. DECIMAL[(显示长度[,小数位数])] [UNSIGNED] [ZEROFILL]
以字符串的形式存储的浮点数,所以的字节数由显示长度节点。它的最大可能是DOUBLE。如果没有指定显示长度则缺省为10;如果没有指定小数位数,则缺省为0。
2. [NATIONAL] VARCHAR(M) [BINARY]
变长字符串。字符串长度的大小为0到255。它对大小写不敏感,除非它为BINARY的。在MySQL4.1.0版本后,长度可以超过255,如果长度超过了255,将被转换成TEXT类型。
3. BLOB或者TEXT
BLOB用来存储二进制对象,TEXT用来存储文本值。BLOB与TXT类型基本相同,不同的是在做比较时TXT对大小写不敏感,BLOB对大小写敏感。在大多数情况下可以将TXT看作是对VARCHAR的扩展,它的最大长度更大,不同的是在存储时TXT不会自动将结尾的空格去掉,而VARCHAR会。BLOB可看作是对VARCHAR BINARY的扩展。BLOB和TXT的列不能有缺省值。
BLOB有四种:TINYBLOB—最大长度为255(2^8-1);BLOB—最大长度为65535(2^16-1);MEDIUMBLOB—最大长度为16777215(2^24-1);LONGBLOB—最大长度为4294967295或者4G(2^32-1)。
TXT也有四种:TINYTXT—最大长度为255;TXT—最大长度为65535;MEDIUMTXT—最大长度为16777215(2^24-1);LONGTXT—最大长度为4294967295或者4G(2^32-1)。
4. DATETIME
日期和时间,8个字节。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59',MySQL以'YYYY-MM-DD HH:MM:SS'格式显示它的值,但允许以字符串或者数字的形式给它赋值。
5. TIMESTAMP[(显示长度)]
4个字节。支持的范围是‘1970-01-01 00:00:00’到2037年12月31日子夜之间某时刻的简单表示形式。在MySQL4.0及更早的版本中,它的显示格式为YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, 或者YYMMDD,这要依赖显示长度的取值。从MySQL4.1版本后,改为'YYYY-MM-DD HH:MM:SS'格式。它的主要用途是保持对表更新的记录,当向表insert或update记录时,如果没有提供TIMESTAMP列的值,则它将被置为进行该操作时的时间,如果提供TIMESTAMP列的值为NULL, 则它将被自动置为当前时间。
2.6. SQL语句
MySQL数据库部分支持ANSI SQL_99语法,我们主要使用CREATE TABLE,INSERT,DELETE,UPDATE,SELECT操作在这方面是支持的。但是由于目前MySQL不支持储存过程、触发器和视图,这样我们的一些数据库服务需要编程实现。
2.7. 应用接口API
为了方便应用程序的开发,MySQL 提供了用Perl、PHP、Java、Python、C++、Tcl 编程语言编写的客户机库,它允许从任何程序的内部访问 MySQL 数据库。客户机库实现应用程序编程接口(API),API 定义客户机程序如何建立和执行与服务器的通信。我们的OMCR主要采用C、C++和JAVA编程,因此从编程接口上看MySQL已经满足我们的需求。