其他存储引擎支持的一些功能在 NDB 表中不支持。尝试在 NDB Cluster 中使用这些功能本身不会导致错误;但是,在期望支持或强制执行这些功能的应用程序中可能会出现错误。引用这些功能的语句,即使被 NDB 有效忽略,也必须在语法上以及其他方面有效。
索引前缀。 索引上的前缀在
NDB表中不支持。如果前缀用作CREATE TABLE、ALTER TABLE或CREATE INDEX等语句中索引规范的一部分,则NDB不会创建该前缀。包含索引前缀并创建或修改
NDB表的语句仍然必须在语法上有效。例如,无论存储引擎如何,以下语句始终会因错误 1089 不正确的索引前缀;使用的键部分不是字符串,使用的长度超过键部分,或者存储引擎不支持唯一的索引前缀键 失败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 Cluster 复制”。使用全局事务标识符 (GTID) 的复制与 NDB Cluster 不兼容,并且在 NDB Cluster 9.0 中不受支持。使用
NDB存储引擎时,请勿启用 GTID,因为这很可能会导致问题,包括 NDB Cluster 复制失败。半同步复制在 NDB Cluster 中不支持。
生成列。
NDB存储引擎不支持对虚拟生成列进行索引。与其他存储引擎一样,您可以在存储的生成列上创建索引,但您应该记住
NDB使用DataMemory来存储生成列以及IndexMemory来存储索引。请参见 JSON 列和 NDB Cluster 中的间接索引,了解示例。NDB Cluster 将存储在生成列中的更改写入二进制日志,但不记录对虚拟列的更改。这不会影响 NDB Cluster 复制或
NDB与其他 MySQL 存储引擎之间的复制。
请参见 第 25.2.7.3 节,“与 NDB Cluster 中事务处理相关的限制”,了解有关 NDB 中事务处理限制的更多信息。