【问题标题】:MySQL InnoDB foreign key between different databases不同数据库之间的 MySQL InnoDB 外键
【发布时间】:2011-04-23 17:32:54
【问题描述】:

我想知道在 MySQL 的 InnoDB 中是否有可能有一个带有 外键table 引用不同 database 中的另一个表?

如果是这样,如何做到这一点?

【问题讨论】:

    标签: mysql database foreign-keys innodb


    【解决方案1】:

    有可能:Link to do it

    示例(Table1 在 database1 中,HelloTable 在 database2 中):

    ALTER TABLE Table1 
    ADD foreign key FK_table1(ColumnNameFromTable1)
    REFERENCES db2.HelloTable(ColumnNameFromHelloTable)
    

    【讨论】:

    • +1 必须补充的是,如果除了链接之外,如果您在此处总结了答案中的链接内容,会更有帮助!
    • -1 链接不够,答案应包含更多信息(解释或示例)。
    【解决方案2】:

    我认为https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html 没有任何限制。

    所以只需使用 otherdb.othertable 就可以了。

    【讨论】:

    • @Code4R7 确保表使用相同的引擎,如documentation:“父表和子表必须使用相同的存储引擎[...]” i> 要更改表的引擎,ALTER TABLE my_table ENGINE = InnoDB; 适用于 MariaDB 10.1.16。
    【解决方案3】:

    下面是如何在表t2上添加外键,参考表db1.historial(codh):

    alter table t2
    add foreign key FK_t2(micod2)
        references db1.historial(codh)
        on delete cascade
        on update cascade;
    

    【讨论】:

      【解决方案4】:
      ALTER TABLE `tablename1`
      ADD CONSTRAINT `tablename1_student_id_foreign` 
      FOREIGN KEY (`tablename1`.`id`) 
      REFERENCES `db2`.`tablename2`(`id`)
      ON DELETE CASCADE ON UPDATE CASCADE;
      

      如果我们在 db1 中有表调用答案,在 db2 中有学生调用 ramiyusu_offline

      我们必须输入如下

      ALTER TABLE `answers`
      ADD CONSTRAINT `answers_student_id_foreign` 
      FOREIGN KEY (`id`)
      REFERENCES `ramiyusu_offline`.`student`(`id`) 
      ON DELETE CASCADE ON UPDATE CASCADE;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-29
        • 2013-09-16
        • 2011-12-04
        相关资源
        最近更新 更多