免费数据库
SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracle XE)
http://blog.csdn.net/wangji163163/archive/2009/02/16/3895401.aspx
老调重弹-怎样选择开源免费数据库
http://www.iteye.com/topic/12042
主要关系型数据库系统对比
http://www.pgsqldb.org/mwiki/index.php/%E4%B8%BB%E8%A6%81%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B3%BB%E7%BB%9F%E5%AF%B9%E6%AF%94#.E5.9F.BA.E6.9C.AC.E5.8A.9F.E8.83.BD
PostgreSQL Global Development Group | June 1989 | 8.2.4 | BSD |
4D s.a.s | 1984 | 2004.5 | 专有 |
Sybase | 1987 | 15.0 | 专有 |
Apache | 2004 | 10.2.2.0 | Apache License |
IBM | 1982 | 9 | 专有 |
Elevate Software | ? | 4.25 | 专有 |
Elevate Software | ? | 1.01 | 专有 |
Firebird Foundation | July 25, 2000 | 2.0.1 | Initial Developer's Public License |
IBM | 1985 | 10.0 | 专有 |
HSQL Development Group | 2001 | 1.8.0 | BSD |
H2 Software | 2005 | 1.0 | Freeware |
Ingres Corp. | 1974 | Ingres 2006 II 9.0.4 | GPL 与 专有 |
CodeGear | 1985 | 2007 | 专有 |
MySQL AB, SAP AG | ? | 7.6 | GPL 或 专有 |
Microsoft | 1989 | 9.00.3042 (2005 SP2) | 专有 |
The MonetDB Developer Team | 2004 | 4.16 (Feb. 2007) | MonetDB Public License v1.1 |
MySQL AB | 1996年11月 | 5.0.41 | GPL 或 专有 |
Hewlett-Packard | 1987 | SQL MX 2.0 | 专有 |
Oracle Corporation | 1979年11月 | 10g Release 2 | 专有 |
Oracle Corporation | 1984 | 7.2 | 专有 |
Progress Software Corporation | 1984 | 10.1B | 专有 |
OpenLink Software | 1998 | 4.5.3 (April 2006) | GPL 或 专有 |
Pervasive Software | ? | 9 | 专有 |
University of Paisley | 2005年11月 | 0.5 | 专有 |
SmallSQL | April 16 2005 | 0.12 | LGPL |
Sybase | 1992 | 10.0 | 专有 |
D. Richard Hipp | August 17 2000 | 3.3.7 | Public domain |
Teradata | 1984 | V2R8.2 | 专有 |
Paradigma Software | Febrary 1998 | 3.0.1 | 专有 |
这些数据库所能支持的操作系统。
1 2 2 2 1是 | 是 | 是 | 是 | 是 | 否 |
是 | 是 | 否 | 否 | 否 | 否 |
是 | 是 | 是 | 是 | 是 | 否 |
是 | 是 | 是 | 是 | 是 | 是 |
是 | 否 | 是 | 否 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 可能 |
是 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 可能 |
是 | 是 | 是 | 是 | 是 | 否 |
是 | 否 | 是 | 是 | 是 | 可能 |
是 | 否 | 是 | 否 | 是 (Solaris) | 否 |
是 | 否 | 是 | 否 | 是 | 是 |
是 | 否 | 是 | 否 | 是 | 可能 |
是 | 否 | 否 | 否 | 否 | 否 |
是 | 是 | 是 | 否 | 是 | 否 |
是 | 是 | 是 | 是 | 是 | 可能 |
是 | 是 | 是 | 否 | 是 | 是 |
是 | 否 | 是 | 否 | 是 | 否 |
是 | 是 | 是 | 是 | 是 | 是 |
是 (.NET) | 否 | 是 (Mono) | 否 | 否 | 否 |
是 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 否 | 是 | 否 |
是 | 是 | 是 | 是 | 是 | 可能 |
是 | 否 | 是 | 否 | 是 | 否 |
是 | 是 | 是 | 否 | 否 | 否 |
注记 (1): Open source databases listed as UNIX-compatible will likely compile and run under z/OS's built-in UNIX System Services (USS) subsystem. Most databases listed as Linux-compatible can run alongside z/OS on the same server using Linux on zSeries.</cite>
注记 (2): 该项受该平台上Java虚拟机的可用性制约。</cite>
数据库系统所能实现的基本功能对比。
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 3 | 是 3 | 是 3 | 是 |
是 | 是 | 是 | 是 |
是 | 否 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 |
是 | 否 4 | Basic 4 | 是 |
是 | 是 | 是 | 是 |
否 | 是 | 否 | 是 |
注记 (3): 需要使用InnoDB格式数据表才能实现关联完整性约束与事务。 However, even the InnoDB table type permits storage of values that exceed the data range; some view this as violating the Integrity constraint of ACID.
注记 (4): 外联键约束在语法上有效,但实际上并不能得到强制执行,可使用触发器替代。不支持嵌套事务。[1]
是 | 否 7 |
是 5 | 否 |
是 | 否 |
是 | 是 |
Will be in 2.1 | 否 (only common views) |
是 | 否 |
是 | 否 |
是 | 是 |
是 | Ingres r4 |
是 | 否 |
是 | 否 |
是 | 是 |
是 | 否 |
是 | 否 6 |
是 | 是 |
是 | 否 |
是 | 是 |
否 | 否 |
是 | 是 |
是 | 否 |
是 | 是 |
是 | 否 |
注记 (5): 服务器提供临时数据库,可供会话存放公共/私有的临时表。[2]
注记 (7): 物化视图可用PL/pgSQL,PL/Perl,PL/Python或其他过程语言的存储过程和触发器模拟。 [4] .
数据库所支持的索引类型(除基本的B树外)
是 | 是 | 是 | 是 | 是 10 | 否 11 | 是 | 是 |
否 | 否 | 否 | 否 | 是 | 否 | 否 | 否 |
否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
否 | ? | 否 | 否 | 是 | 是 | 否 | 否 |
否 | 否 | 是 | 否 | 是 16 | 否 | 否 | 否 |
否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
否 | 是 | 否 | 否 | 否 | 否 | 否 | 否 |
是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 |
是 | 是 | Ingres r4 | 否 | 否 | Ingres r4 | 否 | 否 |
否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
? | ? | 否 | 否 | 否 | 否 | 否 | 否 |
? | 否n/Cluster & fill factor | 是 8 | 是 9 | 是 8 | 否 | 否 | 否 |
否 | 是 | 否 | 否 | 否 | 否 | 否 | 否 |
仅限MyISAM | MEMORY, Cluster (NDB), 仅限InnoDB,17 | 否 | 否 | 否 | 否 | 否 | 否 |
EE edition only | Cluster Tables | 是 | 是 15 | 是 | 是 | 否 | 否 |
是 | Cluster | 是 | 否 | 否 | 是 | 否 | 否 |
否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
否 | 否 | 否 | 否 | 是 | 否 | 否 | 否 |
否 | 是 | 是 | 是 | 否 | 是 | 否 | 否 |
否 | 否 | 是 8 | 是 17 | 是 | 是 | 否 | 否 |
注记 (8): 可通过索引一个经过计算的列,或使用一个已索引的视图实现 [5]
注记 (17): InnoDB自动按需生成 adaptive hash index 。
注记 (10): 一个有效的PostgreSQL索引可以用来进行倒排序。
注记 (11): PostgreSQL将在8.3中支持保存于磁盘的位图索引。8.2提供了一种称为"内存位图扫描(in-memory bitmap scans)"的相关技术。
注记 (15): 在Oracle 8i及以后的办本可使用基于函数的索引(Function-based Indexes)实现。
注记 (16): The users need to use a function from freeAdhocUDF library or similar. [7]
注记 (17): 在Valentina中可使用基于函数的索引(Function-based Indexes)实现。
有关其他类型对象的支持情况。
12 12 12 12 12是 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 是 |
否 | 是 | 是 | 是 13 | 是 13 | 是 13 |
否 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 是 |
? | 否 | 是 | 是 | 是 | 是 |
是 | 否 | 是 | 是 | 是 | 是 |
? | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | ? |
是 (2000 and beyond) | 是 | 是 | 是 | 是 | 是 |
否 | 否 | 是 | 是 | 是 | 是 |
否 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 是 |
是 | 是 | 是 | 是 | 是 | 是 |
否 | 否 | 是 | 否 | 否 | 是 |
否 | 是 | 是 | 是 | 是 | 是 |
否 | 是 | 是 | 否 | 是 | 否 |
注记 (12): 以上函数 和存储过程 都是指使用SQL或者过程语言(如PL/SQL、PL/pgSQL等)编写的内部程序调用。外部调用 是指使用其他外部语言,如C、Java等语言编写的调用。存储过程 是这类调用的笼统称呼,在不同的供应商系统中,它们往往有着不同的定义。
注记 (13): In Derby, users code functions and procedures in Java.
是 14 | 是 14 | 是 14 | 是 14 |
是 | 是 | 否 | 是 |
否 | 否 | 否 | 否 |
是 | 是 | 是 | 是 |
否 | 否 | 否 | 否 |
是 | 是 | ? | ? |
是 | 是 | 是 | 是 |
否 | 否 | 否 | 否 |
否 | 否 | 否 | 否 |
是 | 否 | 否 | 否 |
是 (M5) | 是 (M5) | 是 (M5) | 否 |
是 (5.1 beta) | 是 (5.1 beta) | 是 (5.1 beta) | 是 (5.1 beta) |
是 | 是 | 是 | 是 |
是 | 否 | 否 | 否 |
否 | 否 | 否 | 否 |
否 | 否 | 否 | 否 |
否 | 否 | 否 | 否 |
是 | 是 | 是 | 是 |
否 | 否 | 否 | 否 |
注记 (14): PostgreSQL 8.1 提供了使用check约束实现的数据表分区。范围、列表以及哈希分区可通过PL/pgSQL或者其他过程语言模拟。[8]
SQL标准明确了SQL模式(SQL schema)的定义,然而,许多数据库对它的实现并不正确。SQL模式是指一个数据库内部的名字空间,此空间内部的对象可以通过成员操作符.
访问。
一个完整名字的查询类似这种形式:select * from database.schema.table
。
The SQL specification makes clear what an "SQL schema" is; however, different databases implement it wrongly. To compound this confusion the functionality can, when wrongly implemented, overlap with that of the parent-database. An SQL schema is simply a namespace within a database, things within this namespace are addressed using the member operator dot ".
". This seems to be a universal amongst all of the implementations.
A true fully (database, schema, and table) qualified query is exemplified as such:select * from database.schema.table
Now, the issue, both a schema and a database can be used to isolate one table, "foo" from another like named table "foo". The following is pseudo code:
select * from db1.foo
vs. select * from db2.foo
(no explicit schema between db and table) select * from [db1.]default.foo
vs. select * from [db1.]alternate.foo
(no explicit db prefix) The problem that arises is that former MySQL users will mistakenly create multiple databases for one project. In this context MySQL databases are analogous in function to Postgres-schemas, insomuch as Postgres lacks off-the-shelf cross-database functionality that MySQL has. Conversely, Postgres has rightfully applied more of the specification, in a sane-bottom-up approach, implementing cross-table, cross-schema, and then left room for future cross-database functionality.
MySQL aliases behind the scenes, schema with database , such that create schema
, and create database
are analogs. It can be said, that MySQL therefore, has implemented cross-table functionality, skipped schema functionality entirely and provided similar functionality into their implementation of a database. In summary, Postgres fully supports schemas, but lacks some functionality MySQL has with databases, while MySQL doesn't even attempt to support true schemas.
The end result is spin from both communities. While the Postgres community maintains that one database is all that is needed for one project; and MySQL, that schemas have no legitimate purpose when the functionality can be achieved with databases. Postgres adheres to more of the SQL specification, in a more intuitive fashion (bottom-up), while MySQL's pragmatic counterargument allows their users to get the job done without any major drawback.
end