其他存储引擎支持的一些功能在 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
中事务处理限制的更多信息。