如何在MySQL中创建复合自引用外键?

时间:2017-06-20 17:25:06

标签: mysql database

1215 - 无法添加外键约束

每当我尝试执行以下脚本时,PhpMyAdmin都会给我这个错误:

它是自引用的,所以它不应该与它的类型有任何关系,并且语法似乎是正确的,给出了stackoverflow和MySQL的文档中的其他示例。

不确定它是否有帮助,但代码是MySQL Workbench生成的迁移脚本:从Microsoft SQL迁移到MySQL。

有没有人知道可能导致此错误的原因?

CREATE TABLE IF NOT EXISTS `clinicalTrialEmployee` (
  clinicalTrialId INT NOT NULL,
  employeeId INT NOT NULL,
  clinicalTrialEmployeeTypeId INT NULL,
  roleName VARCHAR(50) CHARACTER SET 'utf8' NULL,
  PRIMARY KEY (clinicalTrialId, employeeId),
  CONSTRAINT FK_clinicalTrialEmployee_clinicalTrialEmployee
    FOREIGN KEY (clinicalTrialId , employeeId)
    REFERENCES clinicalTrialEmployee (clinicalTrialId , employeeId)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

2 个答案:

答案 0 :(得分:0)

世界上甚至对一个领域引用自身意味着什么?这对我来说是新的。我在桌子上有一列是同一桌子上另一列的外键,但我从来没有听说过引用自身的列。你明白这样的外键约束应该完成什么吗?我的意思是字面意思:这个的实际意义是什么?最有可能的答案是MySQL并不支持这一点。不同的方言和#34;之间存在很多差异。 SQL,并且只是因为从Microsft SQL服务器导出创建此SQL并不意味着MySQL通常支持语法原则。

其他人可能会收到更多信息,但在此期间我不会尝试完全按原样重现。我会弄清楚它究竟应该完成什么,弄清楚这是否仍然很重要,然后找到一种方法在MySQL中做相同的操作(如果它甚至可能)。

答案 1 :(得分:0)

通常表中还有另一个字段来引用相关记录。例如,您可能有一个 supervisor_id 指向也在临床试验员工表中的主管员工。

现在外键的写法,就是引用自身,变成无限循环。