【问题标题】:Adding multiple foreign key constraints添加多个外键约束
【发布时间】:2020-07-15 10:02:00
【问题描述】:

我在向该表添加多个外键约束时遇到问题。我收到一个错误提示

外键约束格式不正确

引用的两个 id 都是各自表中的主键。我做错了什么?

CREATE TABLE `works_on` (
    `eid` int(11) DEFAULT NULL,
    `pid` int(11) DEFAULT NULL,
    `start_date` date NOT NULL,
    PRIMARY KEY (`eid`, `pid`),
    CONSTRAINT `works_on_ibfk_1` FOREIGN KEY (`eid`)
    REFERENCES `employee` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT `works_on_ibfk_2` FOREIGN KEY (`pid`) 
    REFERENCES `project` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB

【问题讨论】:

  • 您使用的是什么数据库系统? MySQL?微软 SQL?玛丽亚数据库?
  • 请始终向我们展示完整的错误消息
  • 对不起,我正在使用 MariaDB,当我尝试运行查询时,它显示“外键格式不正确”。此外,VSCode 说的是“。”预计在第二个约束开始时。
  • 这是多:多映射表吗?需要SETCASCADE 的场景是什么?

标签: mysql sql database mariadb


【解决方案1】:

你有一个悖论 - 你不能有一个主键,其中任何元素都有一个空值,因此你不能删除 SET NULL..

您还应该看到一条错误消息,告诉您主键无效..

【讨论】:

  • 这两个外键引用了两个不同的主键,它们会自动递增,我希望这样,如果删除了任何行,为该行引用的 'eid' / 'pid' 将恢复为空。
  • 不恢复为 NULL,删除该行。然后使用LEFT JOIN 得到一个“NULL”。
猜你喜欢
  • 2017-06-10
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 2019-12-06
相关资源
最近更新 更多