當某些與 MySQL 功能相關的 SQL 陳述式用於 NDB
表格時,會產生錯誤,如下列清單所述
暫存表格。 不支援暫存表格。嘗試建立使用
NDB
儲存引擎的暫存表格,或將現有的暫存表格變更為使用NDB
都會失敗,並出現錯誤訊息 表格儲存引擎 'ndbcluster' 不支援建立選項 'TEMPORARY'。NDB 表格中的索引和鍵。 NDB Cluster 表格上的鍵和索引受下列限制約束
欄寬。 嘗試在寬度大於 3072 個位元組的
NDB
表格欄上建立索引會遭到拒絕,並出現ER_TOO_LONG_KEY
:指定的鍵太長;最大鍵長度為 3072 個位元組。嘗試在寬度大於 3056 個位元組的
NDB
表格欄上建立索引會成功,但會出現警告。在這種情況下,不會產生統計資訊,這表示可能會選取非最佳的執行計畫。因此,如果可能,您應該考慮將索引長度縮短至 3056 個位元組以下。TEXT 和 BLOB 欄。 您無法在
NDB
表格欄上建立索引,這些表格欄使用任何TEXT
或BLOB
資料類型。FULLTEXT 索引。
NDB
儲存引擎不支援FULLTEXT
索引,這種索引僅適用於MyISAM
和InnoDB
表格。使用 HASH 鍵和 NULL。 在唯一鍵和主鍵中使用可為 Null 的欄,表示使用這些欄的查詢會被視為完整表格掃描。若要解決此問題,請將欄設定為
NOT NULL
,或重新建立索引,而不要使用USING HASH
選項。前置詞。 沒有前置詞索引;只有整個欄可以建立索引。(
NDB
欄索引的大小一律與欄的寬度相同,最多為 3072 個位元組,如本節前面所述。另請參閱 第 25.2.7.6 節「NDB Cluster 中不支援或遺失的功能」,以取得其他資訊。)BIT 欄。
BIT
欄不能是主鍵、唯一鍵或索引,也不能是複合主鍵、唯一鍵或索引的一部分。AUTO_INCREMENT 欄。 與其他 MySQL 儲存引擎一樣,
NDB
儲存引擎每個表格最多可處理一個AUTO_INCREMENT
欄,而且這個欄必須建立索引。不過,如果 NDB 表格沒有明確的主鍵,系統會自動定義AUTO_INCREMENT
欄,並將其用作「隱藏」的主鍵。因此,您無法建立具有AUTO_INCREMENT
欄且沒有明確主鍵的NDB
表格。下列
CREATE TABLE
陳述式無法運作,如下所示# No index on AUTO_INCREMENT column; table has no primary key # Raises ER_WRONG_AUTO_KEY mysql> CREATE TABLE n ( -> a INT, -> b INT AUTO_INCREMENT -> ) -> ENGINE=NDB; ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key # Index on AUTO_INCREMENT column; table has no primary key # Raises NDB error 4335 mysql> CREATE TABLE n ( -> a INT, -> b INT AUTO_INCREMENT, -> KEY k (b) -> ) -> ENGINE=NDB; ERROR 1296 (HY000): Got error 4335 'Only one autoincrement column allowed per table. Having a table without primary key uses an autoincr' from NDBCLUSTER
下列陳述式會建立一個表格,其中包含主鍵、
AUTO_INCREMENT
欄,以及此欄上的索引,並且會成功# Index on AUTO_INCREMENT column; table has a primary key mysql> CREATE TABLE n ( -> a INT PRIMARY KEY, -> b INT AUTO_INCREMENT, -> KEY k (b) -> ) -> ENGINE=NDB; Query OK, 0 rows affected (0.38 sec)
外來鍵的限制。 NDB 8.4 中對外來鍵限制的支援與
InnoDB
提供的支援相當,但受下列限制約束每個參照為外來鍵的欄都需要明確的唯一鍵,如果它不是表格的主鍵。
當參照父表格的主鍵時,不支援
ON UPDATE CASCADE
。這是因為主鍵的更新會實作為刪除舊的列(包含舊的主鍵)加上插入新的列(包含新的主鍵)。這對
NDB
核心不可見,後者會將這兩個列視為相同,因此無法知道應該串聯此更新。如果子表格包含任何
TEXT
或BLOB
類型的一個或多個欄時,也不支援ON DELETE CASCADE
。(錯誤 #89511、錯誤 #27484882)不支援
SET DEFAULT
。(InnoDB
也不支援。)接受
NO ACTION
關鍵字,但會將其視為RESTRICT
。NO ACTION
是一個標準 SQL 關鍵字,在 MySQL 8.4 中是預設值。(也與InnoDB
相同。)在 NDB Cluster 的先前版本中,當建立具有參照另一個表格中索引的外來鍵的表格時,有時可能會建立外來鍵,即使索引中欄的順序不符也沒問題,原因是內部並非總是會傳回適當的錯誤。針對這個問題的部分修正改善了內部使用的錯誤,使其在大多數情況下可以運作;不過,如果父索引是唯一索引,仍然可能發生這種情況。(錯誤 #18094360)
如需詳細資訊,請參閱 第 15.1.20.5 節「外來鍵限制」,以及 第 1.7.3.2 節「外來鍵限制」。
NDB Cluster 和幾何資料類型。
NDB
表格支援幾何資料類型(WKT
和WKB
)。不過,不支援空間索引。字元集和二進位日誌檔。 目前,使用
latin1
(ASCII) 字元集建立ndb_apply_status
和ndb_binlog_index
表格。由於二進位日誌的名稱會記錄在此表格中,因此使用非拉丁字元命名的二進位日誌檔在此表格中會無法正確參照。這是一個已知的問題,我們正在努力解決。(錯誤 #50226)若要解決此問題,在命名二進位日誌檔或設定任何
--basedir
、--log-bin
或--log-bin-index
選項時,請僅使用 Latin-1 字元。使用使用者定義分割區建立 NDB 表格。 NDB Cluster 中對使用者定義分割區的支援僅限於 [
LINEAR
]KEY
分割區。在CREATE TABLE
陳述式中使用ENGINE=NDB
或ENGINE=NDBCLUSTER
的任何其他分割區類型都會導致錯誤。可以覆寫此限制,但不支持在生產環境中使用。如需詳細資訊,請參閱 使用者定義的分割區和 NDB 儲存引擎 (NDB Cluster)。
預設分割區配置。 根據預設,所有 NDB Cluster 表格都會使用表格的主鍵以
KEY
分割區。如果沒有為表格明確設定主鍵,則會改用NDB
儲存引擎自動建立的「隱藏」主鍵。如需有關這些及相關問題的其他討論,請參閱 第 26.2.5 節「KEY 分割區」。會導致使用者分割的
NDBCLUSTER
資料表不符合以下任一或兩個要求的CREATE TABLE
和ALTER TABLE
陳述式是不允許的,並且會發生錯誤。資料表必須具有明確的主鍵。
資料表分割運算式中列出的所有欄位都必須是主鍵的一部分。
例外情況。 如果使用者分割的
NDBCLUSTER
資料表是使用空的欄位清單 (亦即,使用PARTITION BY [LINEAR] KEY()
) 建立的,則不需要明確的主鍵。NDBCLUSTER 資料表的最大分割區數量。 當採用使用者定義的分割時,每個節點群組可以為
NDBCLUSTER
資料表定義的最大分割區數量為 8 個。(如需有關 NDB Cluster 節點群組的更多資訊,請參閱第 25.2.2 節,「NDB Cluster 節點、節點群組、片段複本和分割區」)。不支援 DROP PARTITION。 不可能使用
ALTER TABLE ... DROP PARTITION
從NDB
資料表捨棄分割區。ALTER TABLE
的其他分割擴充功能 —ADD PARTITION
、REORGANIZE PARTITION
和COALESCE PARTITION
— 支援 NDB 資料表,但使用複製,因此未經最佳化。請參閱第 26.3.1 節,「RANGE 和 LIST 分割區的管理」以及第 15.1.9 節,「ALTER TABLE 陳述式」。分割區選取。
NDB
資料表不支援分割區選取。如需更多資訊,請參閱第 26.5 節,「分割區選取」。JSON 資料類型。 在 NDB 8.4 隨附的 mysqld 中,
NDB
資料表支援 MySQLJSON
資料類型。一個
NDB
資料表最多可以有 3 個JSON
欄位。NDB API 沒有用於處理
JSON
資料的特殊配置,它只將其視為BLOB
資料。將資料處理為JSON
必須由應用程式執行。