InnoDB 的 SQL 語法在 MySQL、MariaDB 和 Percona 之間是否保證相同?
我開發了一個使用 MySQL 並明確使用 InnoDB 表引擎的應用程序。在少數情況下,我們有客戶將此應用程序與 MariaDB 或 Percona 一起使用。
我知道 MariaDB 和 Percona 是“替代品”,但我的理解是,這僅意味著您不必遷移數據即可從 MySQL 切換到 MariaDB 或 Percona。它沒有說明與這些數據庫介面的應用程序的 SQL 語法相同。
我知道虛擬列的 DDL 在 MySQL 和 MariaDB 之間並不相同,但我不清楚這是 InnoDB 和 Xtradb 之間的區別,還是 MySQL 和 MariaDB 之間的區別。
或者換一種說法,我的應用程序是否可以保證在 MySQL、MariaDB 和 Percona 上執行,只要它們的版本相同並且所有表都是 InnoDB?
InnoDB/XtraDB 是一個表引擎,它在解析 SQL 方面沒有發言權。那是另一層,它應該主要是獨立於引擎的。
MariaDB 5.5 應該與 MySQL 5.5 99.99% 的 SQL兼容(有一些小問題),而 MariaDB 10.x向後兼容5.5。
對於 MariaDB 10 和 MySQL 5.6(現在是 5.7),路徑以某種方式出現了分歧- 一些特性是在一個中實現的,但不是在另一個中實現的,有些是在兩者中實現的,但有一些差異(GTID、虛擬/計算列、優化器的差異,…… )。
所以答案是:使用 InnoDB/XtraDB 甚至 MyISAM 之間的“標準”查詢應該沒有區別,因為兩者都“低於”MySQL/MariaDB 結構的 SQL 級別。您只需要注意 5.6+/10.0+ 中新功能的語法差異,而這些差異不是因為引擎差異(例如,虛擬列不是由 InnoDB afaik 處理,而是由 SQL 層處理 - 永久計算列是只是 InnoDB 的另一個普通列,更高層補充數據,非儲存變體根本不“接觸”引擎,並且總是在引擎返回所需的列之後計算)。