有一些功能在其他存储引擎中受支持,但是在 NDB
表中不支持。尝试在 NDB 集群中使用这些功能不会引发错误本身;然而,错误可能会在应用程序中出现,因为这些功能没有被支持或执行。语句引用这些功能,即使被 NDB
忽视,也必须是语法正确的。
-
索引前缀。 索引前缀在
NDB
表中不受支持。如果在语句中,如CREATE TABLE
、ALTER TABLE
或CREATE INDEX
,使用了前缀,NDB
不会创建该前缀。包含索引前缀的语句,创建或修改
NDB
表,必须仍然是语法正确的。例如,以下语句总是失败,错误代码为 1089 Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys,无论存储引擎是什么:CREATE TABLE t1 ( c1 INT NOT NULL, c2 VARCHAR(100), INDEX i1 (c2(500)) );
这是由于 SQL 语法规则规定,索引不能有比自己更长的前缀。
-
保存点和回滚。 保存点和回滚到保存点被忽视,如同在
MyISAM
中一样。 -
提交的持久性。 没有磁盘上的持久提交。提交被复制,但没有保证日志被刷新到磁盘上。
-
复制。 基于语句的复制不受支持。设置集群复制时,使用
--binlog-format=ROW
(或--binlog-format=MIXED
)。请参阅 第 25.7 节,“NDB 集群复制”,以获取更多信息。使用全局事务标识符(GTIDs)的复制与 NDB 集群不兼容,不支持在 NDB 集群 8.3 中使用 GTIDs。当使用
NDB
存储引擎时,请勿启用 GTIDs,因为这可能会导致问题,包括 NDB 集群复制的失败。半同步复制在 NDB 集群中不受支持。
-
生成列。
NDB
存储引擎不支持虚拟生成列的索引。与其他存储引擎一样,您可以在存储生成列上创建索引,但请注意
NDB
使用DataMemory
存储生成列,以及IndexMemory
存储索引。请参阅 JSON 列和间接索引在 NDB 集群,以获取示例。NDB 集群将存储生成列的更改写入二进制日志,但不记录虚拟列的更改。这不应该影响 NDB 集群复制或 NDB 和其他 MySQL 存储引擎之间的复制。
请参阅 第 25.2.7.3 节,“NDB 集群中的事务处理限制”,以获取更多关于 NDB 集群中事务处理限制的信息。