mysql - 如何设置指向不同模式中的表的外键约束?

标签 mysql database foreign-keys

我对 MySQL 语法比较陌生。我正在尝试建立一个具有不同模式的数据库。为了方便起见,我将代码分为两部分:

  • 在第一部分中,我在每个架构中创建表,而不施加外键约束
  • 在第二部分中,我将编写 ALTER TABLE 命令来创建外键关系。

当为表中的 ID 创建指向另一个架构中的表的外键约束时,我得到

“错误代码:1824。无法打开引用的表'schema_a.table_a”。

实际上,我已经这样做了:

#First part
CREATE SCHEMA `schema_a`
USE `schema_a`;
CREATE TABLE `table_a`
(
    IDa INTEGER NOT NULL,
    ...
    PRIMARY KEY(`IDa`)
 )ENGINE=InnoDB, CHARSET=..., Collate=...;


CREATE SCHEMA `schema_b`
USE `schema_b`;
CREATE TABLE `table_b`
(
    IDb INTEGER NOT NULL,
    IDa INTEGER NOT NULL,
    ...
    PRIMARY KEY(`IDb`)
)ENGINE=InnoDB, CHARSET=..., Collate=...;

#Second part
USE `Schema_b`;
ALTER TABLE `table_b`
ADD CONSTRAINT `FK_IDa` FOREIGN KEY (`IDa`) REFERENCES `schema_a.table_a`(`IDa`) ON DELETE CASCADE ON UPDATE CASCADE;

我什至不确定创建外部外键是否正式正确。

有人有任何建议来解决这个问题吗? 谢谢!

最佳答案

`schema_a.table_a`表示一个标识符,即MySQL假设只有表名是schema_a.table_a。您需要单独引用多部分标识符的每个部分,如`schema_a`.`table_a`

ALTER TABLE `table_b`
            ADD CONSTRAINT `FK_IDa`
                           FOREIGN KEY (`IDa`)
                                       REFERENCES `schema_a`.`table_a`
                                                  (`IDa`)
                                       ON DELETE CASCADE
                                       ON UPDATE CASCADE;

或者您可以在特定情况下不引用。

关于mysql - 如何设置指向不同模式中的表的外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63402225/

相关文章:

c# - Asp.net MVC 导出表格到 Excel |外键显示

mysql - 将 gem mysql12 安装到 ruby​​ 时出错

mongodb - 数据库/集合任意但特定的顺序

java - 具有公共(public)外键的 Hibernate ManyToMany 关系

php - Laravel 关系 - 尝试获取非对象的属性

python - 使用 PyMySQL 向 MySQL 中的表中插入数据

mysql - 数据库结构 - 这是正确的做事方法吗?

MySQL根据id更新多行

php - 空选择字段表单值留下不需要的空白

php - 转移到新服务器,现在 CodeIgniter/Ion_Auth 无法工作