数据库之战: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),这是 SQL 的扩展,最初由 Sybase 开发并由 Microsoft 使用。而 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 之后,发出的下一个命令实际上会启动一个新事务,然后该过程会重新开始。这提供了更大的灵活性,也有助于错误控制,因为在明确执行 COMMIT 命令之前不会将任何更改提交到磁盘。
对于 MySQL,事务支持与 InnoDB 轻松兼容。InnoDB 是 MySQL 的存储引擎,默认情况下可用于 MySQL。它提供符合 ACID 的标准事务功能以及外键支持。
数据库对象的组织
数据库对象的组织也是这 3 个数据库的一大区别。MS SQL Server 按数据库名称组织所有对象,例如表、视图和过程。MS SQL 用户被分配给一个登录名,该登录名被授予对特定数据库及其对象的访问权限。在 Microsoft SQL Server 中,每个数据库在服务器上都有一个私有的、非共享的磁盘文件。
而在 Oracle 中,所有数据库对象都按模式分组。模式不过是数据库结构,是数据库对象的子集。所有数据库对象都在所有模式和用户之间共享。尽管所有这些都是共享的,但每个用户的角色和权限都是定义的,并且可以将其限制在某些模式和表中。
简而言之,MySQL、Oracle 和 SQL Server 这三个都是强大的 RDBMS 选项。尽管它们在"幕后"工作和实现方式上存在许多其他差异,但它们的使用方式大致相同。每个都可以在不同环境中用于不同的目的。目的可能相同,但实现方式各不相同。