数据库大战:MSSQL Server、Oracle PL/SQL 和 MySQL
市场上有如此众多的数据库,一场数据库大战已经打响。现在正是了解市场上三大关系数据库——Microsoft SQL Server、Oracle PL/SQL 和 MySQL 的区别和重要性的最佳时机。关系数据库管理系统目前已成为行业发展的基石,而众多选择也让人难以抉择。
关系数据库管理系统诞生于20世纪80年代。本文重点探讨了行业中三大流行 RDBMS——Microsoft SQL Server、Oracle 和 MySQL 的历史和特性。Microsoft SQL Server 和 Oracle 都是商业软件,而 MySQL 则是开源 RDBMS。
Oracle 是第一家在20世纪80年代推出商用 RDBMS 的公司。20世纪90年代中期,Microsoft 推出了 SQL Server,成为 Oracle 的有力竞争对手。另一方面,MySQL 最初是作为开源软件开发和发布的。MySQL 于1995年首次发布,Windows 版本于1998年发布。2008年,它被 SUN 收购,之后又被 Oracle 收购。
语言——沟通的桥梁
任何 RDBMS 的核心都是用于执行查询的语言,这就是它们性能和实现方式受到影响的原因。尽管所有这三种数据库管理系统都使用某种版本的结构化查询语言 (SQL),但 Microsoft SQL Server 使用 Transact-SQL (T-SQL),这是最初由 Sybase 开发并由 Microsoft 使用的 SQL 扩展。而 Oracle 使用 PL/SQL (过程语言/SQL)。
两者都是 SQL 的不同“风格”或方言,并且这两种语言的语法和功能略有不同。这两种语言的主要区别在于它们处理变量、存储过程和内置函数的方式。Oracle 中的 PL/SQL 还可以将过程组合到包中,而 MS SQL Server 则无法做到这一点。PL/SQL 可能更复杂,也可能更强大,而 T-SQL 更简单,更容易实现。
另一方面,MySQL 使用 T-SQL 的精简版,并结合了与 SQL/PSM 密切相关的过程语言。然而,MySQL 的存储代码对象接近 ANSI 标准,但它们又不像 T-SQL(Microsoft 和 Sybase 对 SQL 的专有扩展)那样全面和深入。
事务控制
事务可以被认为是一组作为一个单元执行的操作。例如,如果用户尝试执行一些 SQL 查询,则要么全部执行,要么都不执行。这是 Oracle 和 MS SQL Server 在事务控制方面的主要区别之一。
默认情况下,MS SQL Server 将单独执行并提交每个命令/任务,如果出现任何错误,则很难或不可能回滚更改。“BEGIN TRANSACTION” 命令用于正确分组语句并声明事务的开始,而 COMMIT 语句可在结束时使用。此 COMMIT 语句会将更改的数据写入磁盘,并结束事务。在事务中,ROLLBACK 将丢弃在事务块中所做的任何更改。发出 COMMIT 后,就不可能再回滚到 COMMIT 命令之前的任何状态了。
而在 Oracle 中,每个新的数据库连接都被视为一个新的事务。随着查询的执行和命令的发出,更改仅在数据库内存中进行,并保留在缓存中。在给出显式 COMMIT 语句之前,没有任何内容被提交。提交后,发出的下一个命令实际上会启动一个新事务,然后该过程再次开始。这提供了更大的灵活性,也有助于错误控制,因为在显式执行 COMMIT 命令之前,没有任何更改会被提交到磁盘。
对于 MySQL,事务的支持很容易与 InnoDB 兼容。InnoDB 是 MySQL 的存储引擎,默认情况下可用于 MySQL。它提供标准的 ACID 兼容事务功能以及外键支持。
数据库对象的组织
数据库对象的组织也是这三个数据库之间的一个重要区别。MS SQL Server 按数据库名称组织所有对象,例如表、视图和过程。MS SQL 用户被分配到一个登录名,该登录名被授予对特定数据库及其对象的访问权限。在 Microsoft SQL Server 中,每个数据库在服务器上都有一个私有的、非共享的磁盘文件。
而在 Oracle 中,所有数据库对象都按模式分组。模式只不过是数据库结构,它是数据库对象的子集集合。所有数据库对象都在所有模式和用户之间共享。即使所有内容都是共享的,每个用户的角色和权限也都是定义好的,并且可以限制在某些模式和表中。
简而言之,MySQL、Oracle 和 SQL Server 都是功能强大的 RDBMS 选项。尽管它们在“内部”工作方式和实现方式上存在许多其他差异,但它们的使用方式大致相同。每个数据库可以在不同的环境中以不同的目标使用。目的可能相同,但实现方式却有所不同。