其他存储引擎支持的一些功能在 NDB 表中不受支持。尝试在 NDB 集群中使用任何这些功能本身不会导致错误;但是,在期望支持或强制执行这些功能的应用程序中可能会发生错误。引用此类功能的语句,即使实际上被 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 集群复制”。使用全局事务标识符 (GTID) 进行复制与 NDB 集群不兼容,并且在 NDB 集群 8.4 中不受支持。使用
NDB存储引擎时,请勿启用 GTID,因为这很可能会导致问题,包括 NDB 集群复制失败。NDB 集群不支持半同步复制。
生成列。
NDB存储引擎不支持对虚拟生成列进行索引。与其他存储引擎一样,您可以在存储的生成列上创建索引,但您应该记住,
NDB使用DataMemory来存储生成列,并使用IndexMemory来存储索引。有关示例,请参见 NDB 集群中的 JSON 列和间接索引。NDB 集群将存储的生成列中的更改写入二进制日志,但不会记录对虚拟列所做的更改。这不应影响 NDB 集群复制或
NDB与其他 MySQL 存储引擎之间的复制。
有关 NDB 中事务处理限制的更多信息,请参见 第 25.2.7.3 节“与 NDB 集群中的事务处理相关的限制”。