【问题标题】:MySQL 5.0.11 Error Code #1215: cannot add foreign key constraintMySQL 5.0.11 错误代码 #1215:无法添加外键约束
【发布时间】:2014-09-23 17:28:07
【问题描述】:

根据我在阅读相关 SO 答案和官方文档后的理解,我可能存在列类型不匹配的情况或没有定义所需的 INDEX 情况。但是我无法解决我的问题。

下表创建成功

CREATE TABLE `parts` (
`partnum_rev` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'part number with revision number',
`status` char(4) COLLATE utf8_unicode_ci NOT NULL COMMENT 'part is live or dead',
`partdef` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'part definition',
`makebuy` varchar(4) COLLATE utf8_unicode_ci NOT NULL COMMENT 'part is maked or buyed',
PRIMARY KEY (`partnum_rev`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='table that part specific data is hold'

下表给出了MySQL - Error Code 1215, cannot add foreign key constraint

partnum_revparts 表的主键,所以我无法理解我的原因。

你能帮帮我吗?

最好的问候

CREATE TABLE `bom` (
`lcn` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'logistics control number',
`status` char(4) COLLATE utf8_unicode_ci NOT NULL COMMENT 'part is live or dead',
`partnum_rev` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'part number with revision number',
`effective_date` date NOT NULL COMMENT 'drawing effective date',
`abolish_date` date DEFAULT NULL COMMENT 'drawing abolish date',
`parent_partnum_rev` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'parent part number with revision number',
`bomlevel` tinyint(3) unsigned NOT NULL COMMENT 'bom level',
`quantity` decimal NOT NULL COMMENT 'quantity',
`quantity_unit` char(2) COLLATE utf8_unicode_ci NOT NULL COMMENT 'quantity unit',
`usage_ratio` decimal DEFAULT NULL COMMENT 'usage ratio',
`mttr` decimal DEFAULT NULL COMMENT 'mean time to repair',
`purchasecost` decimal unsigned DEFAULT NULL COMMENT 'purchasing cost',
`moneyunit` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'purchasing cost monetary unit',
PRIMARY KEY (`lcn`), 
FOREIGN KEY (`partnum_rev`) REFERENCES part(`partnum_rev`) ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='table for bill of material'

【问题讨论】:

    标签: mysql sql foreign-keys constraints


    【解决方案1】:

    foreign key 子句是错误的 - 您的表名为 parts(复数!),而不是 part。只需使用正确的表名:

    FOREIGN KEY (`partnum_rev`) REFERENCES parts(`partnum_rev`) ON UPDATE CASCADE 
    

    【讨论】:

      【解决方案2】:

      您的部分中似乎有一个错字,漏掉了一个“s”。尝试以下行:

      FOREIGN KEY (`partnum_rev`) REFERENCES parts(`partnum_rev`) ON UPDATE CASCADE 
      

      【讨论】:

        【解决方案3】:

        几小时后,我立即发现我在FOREIGN KEY (partnum_rev) REFERENCES part(partnum_rev) ON UPDATE CASCADE 行的表名部分(s)中错过了s

        很抱歉打扰了一个愚蠢的语法错误。

        对不起。

        【讨论】:

          猜你喜欢
          • 2018-05-13
          • 2015-05-27
          • 2017-09-18
          • 2014-10-22
          • 2016-06-04
          • 1970-01-01
          • 2016-10-27
          • 2016-05-01
          • 2018-11-10
          相关资源
          最近更新 更多