【问题标题】:What is the meaning of MyISAM doesn't support foreign key? [duplicate]MyISAM 不支持外键是什么意思? [复制]
【发布时间】:2020-04-04 09:03:00
【问题描述】:

正如我在https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html 上看到的,MyISAM 存储引擎在 MySQL 8.0 上不支持外键。 但是当我在我的数据库上尝试时,外键创建成功。

谁能告诉我MyISAM不支持外键的真正含义是什么?

注意,我在 Navicat 上尝试了 MySQL v.8.0 上的代码

Screen Capture of my Navicat when I created the tables []1

【问题讨论】:

  • 你能给我们看看输出吗:show create table utama;
  • 我已经编辑了帖子并添加了查询结果
  • 您的代码图片(请以文本形式发布代码,不要截屏!)甚至不会尝试创建外键。
  • 这是我创建表格的代码。 CREATE TABLE utama (id_utama INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nama VARCHAR(12), id_samping INT) ENGINE = MyISAM; CREATE TABLE 采样 (id_samping INT NOT NULL PRIMARY KEY, posisi VARCHAR(12)) ENGINE = MyISAM; ALTER TABLE utama ADD FOREIGN KEY(id_samping,nama) REFERENCES samping(id_samping, posisi);
  • 这是 SHOW CREATE TABLE utama 的结果。创建表utama (id_utama int(11) NOT NULL AUTO_INCREMENT, nama varchar(12) 默认NULL, id_samping int(11) 默认NULL, 主键(id_utama), 键id_samping ( id_samping,nama) ) ENGINE=MyISAM 默认字符集=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

标签: mysql database myisam


【解决方案1】:

对于不支持外键的存储引擎(如 MyISAM),MySQL Server 会解析并忽略外键规范。

from the docs

这意味着你可以定义一个外键但它没有任何作用。

【讨论】:

  • 我没试过。但是如果我删除表'samping'上的记录'id_samping',它不会影响表'utama'上的记录'id_samping'吗?
  • @hamzbond 我怀疑您将实际的外键与恰好包含您知道它们是其他表中的主键的值的列混淆了(但 MySQL 没有)。
  • 是的..我实际上只是学习数据库。我阅读了 mysql 参考资料。我阅读了它们并尝试了每个查询,最终我混淆了参考资料的内容和我在数据库上所做的事情:(
  • @hamzbond:如果 MySQL 识别出外键,那么它会设置一些限制并检查这些列的数据,以保持所有地方的数据正确以保持完整性。但如果外键被忽略,那么你可以对数据做任何事情——MySQL 不在乎。
  • 我明白了...我尝试在两个表上制作不同的记录,而 MySQL 没有出现任何错误。所以这个 MyISAM 表允许我创建外键查询,但是当我记录时不要对外键做任何事情。
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 2015-01-22
  • 1970-01-01
  • 2014-12-19
  • 2012-11-29
相关资源
最近更新 更多