其他存储引擎支持的一些功能在 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 集群中的事务处理相关的限制”。