資料庫大戰: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 選項。儘管它們在“內部”工作方式和實現方式上存在許多其他差異,但它們的使用方式大致相同。每個資料庫可以在不同的環境中以不同的目標使用。目的可能相同,但實現方式卻有所不同。