MySql 内存引擎不检查更新外键?

MySql memory engine do not check on update foreign key?

经过几次测试,我发现 MEMORY 引擎上的外键遗漏了一项一致性检查。

为了更好地解释,这里有一个 InnoDb 中的类似示例

CREATE TABLE testInnoDb1 (
    c1 int(11) PRIMARY KEY
) ENGINE=InnoDB;

CREATE TABLE testInnoDb2 (
    c1 int(11) PRIMARY KEY,
    FOREIGN KEY (c1) REFERENCES testInnoDb1(c1) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;

INSERT INTO testInnoDb1 (c1) VALUES (42);
INSERT INTO testInnoDb2 (c1) VALUES (42);
-- INSERT INTO testInnoDb2 (c1) VALUES (64); -- This will fail
-- UPDATE testInnoDb2 SET c1=128; -- This will fail

MEMORY也一样

CREATE TABLE testMem1 (
    c1 int(11) PRIMARY KEY
) ENGINE=MEMORY;

CREATE TABLE testMem2 (
    c1 int(11) PRIMARY KEY,
    FOREIGN KEY (c1) REFERENCES testMem1(c1) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=MEMORY;

INSERT INTO testMem1 (c1) VALUES (42);
INSERT INTO testMem2 (c1) VALUES (42);
-- INSERT INTO test2 (c1) VALUES (64); -- This will fail
UPDATE testMem2 SET c1=128; -- This should fail?

我的问题是:为什么内存引擎不保持更新一致性?这是一个错误还是出于任何真正的原因?对此有任何已知错误的参考吗?

作为附加信息,我正在使用 Linux 上的存储库版本进行开发,它仍然是 15.1 (5.1)

MySQL目前不支持外键约束检查:

MySQL 5.6 Reference Manual

13.1.17.3 Using FOREIGN KEY Constraints
Foreign Keys and Other MySQL Statements

Important
For storage engines that do not support foreign keys (such as MyISAM), MySQL Server parses and ignores foreign key specifications.

Chapter 15 Alternative Storage Engines
Table 15.1 存储引擎功能总结

Feature              MyISAM  Memory  InnoDB  Archive  NDB
Foreign key support  No      No      Yes     No       No

15.3 The MEMORY Storage Engine
Table 15.4 MEMORY 存储引擎特性

Foreign key support     No  

PS 从 15.3 开始,InnoDB(有 FK)与 MEMORY(没有):

Performance Characteristics
Despite the in-memory processing for MEMORY tables, they are not necessarily faster than InnoDB tables on a busy server, for general-purpose queries, or under a read/write workload.