在进行了几次测试之后,我发现内存引擎上的外键缺少一致性检查之一。
为了更好地解释,在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记忆也是如此
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?我的问题是:为什么更新一致性不与内存引擎保持一致?那是个错误还是有什么真正的原因?有提到已知的bug吗?
作为附加信息,我正在使用Linux上的存储库版本进行开发,该版本仍然是15.1 (5.1)
发布于 2015-12-19 01:34:14
MySQL目前不支持外键约束检查:
MySQL 5.6参考手册13.1.17.3使用外键约束 外键和其他MySQL语句重要 对于不支持外键(如MyISAM)的存储引擎,MySQL服务器解析并忽略外键规范。第15章替代储存引擎 表15.1存储引擎特性摘要特性MyISAM内存InnoDB存档NDB外键支持否 15.3内存存储引擎 表15.4内存存储引擎特性外键支持号
来自15.3 re InnoDB (有FKs)的PS与内存(没有):
性能特性 尽管内存表在内存中进行处理,但它们不一定比繁忙服务器上的InnoDB表、通用查询或读写工作负载下的表更快。
https://stackoverflow.com/questions/34283488
复制相似问题