【问题标题】:manually choose foreign key column mysql workbench手动选择外键列mysql工作台
【发布时间】:2013-01-08 17:58:47
【问题描述】:

假设我在 MySQL 数据库中有一堆 MyISAM 表。我知道如果我的表是 InnoDB MySQL Workbench 会自动获取表之间的关系。但是,如果我的表是 MyISAM,有没有一种方法可以选择在 MySQL Workbench 中用作外键的列,而不需要 MySQL Workbench 在我的表模式中添加列?例如,假设我在名为users 的表中有这些列:

id              PRIMARY KEY
username        VARCHAR (255)
password        VARCHAR (255)
email           VARCHAR (255)
user_type_id    INT

正如您在上面看到的,user_type_id 将是来自名为user_types 的表的外键。如果我在 MySQL Workbench 中的表 usersuser_types 之间添加多对一关系,则列 user_types_id 将自动添加到我的表 users 的架构中(因为这是 MySQL Workbench 认为的通常是外键)。我不希望这种情况发生,我希望能够告诉 MySQL Workbench 使用列 user_type_id 作为我的外键。有什么办法可以做到吗?

谢谢

注意:当我在 MySQL Workbench 的模型视图上双击一个表时,会有一个外键选项卡,但是当我这样做时,我得到以下文本:

注意:只能为某些存储引擎(如 InnoDB)定义外键。服务器接受其他存储引擎的外键定义,但默默地忽略它们。将表引擎切换到支持外键的引擎,以便在此处进行调整。

【问题讨论】:

    标签: mysql mysql-workbench workbench


    【解决方案1】:

    您可以暂时切换到 InnoDB,定义关系并切换回 MyISAM。关系将保持不变。但是,除了记录您的意图之外,它们没有任何实际用途。

    如果这就是你想要的,那就继续吧。

    顺便说一句:FK 标签页仅在 Windows 上不可用(对于不支持 FK 的引擎),因为我们已经看到许多用户抱怨为 MyISAM 定义了 FK,只是为了在他们的目标数据库中看不到任何效果。在 Linux + OS X 上,无论选择何种存储引擎,您都可以使用 FK。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,我相信您可以通过表格本身的外键选项卡执行此操作。如果您从模型概览中双击一个表,则在底部选项卡上有一个外键选项卡。您可以手动添加外键,但您可以从该对话框中选择。这有意义吗?

      【讨论】:

      • 我试过了,当我点击无法调整任何东西的外键时,我只有一条文字说只能为某些存储引擎(如 InnoDB)定义外键。我会更新帖子,以免其他人提出同样的建议
      • 您使用 MyISAM 与 InnoDB 有什么原因吗?只是好奇,我环顾四周。
      • 因为我的表中没有直接定义约束(因为我用的是框架,所以我让框架处理表上的外键约束)
      • 我对 MyISAM 了解不多,但经过一番摸索,它似乎不支持外键约束:stackoverflow.com/questions/1655435/… 你可以尝试切换到 InnoDB,但如果这对你有帮助的话。执行此操作的 SQL 在链接中。
      • 我知道 MyISAM 不支持外键约束。因此,如果不将表切换到 InnoDB,就绝对没有办法做我想做的事情?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2014-02-16
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      相关资源
      最近更新 更多