0

我正在使用PHP MySQL,并试图将一个外键添加到名为Agents的表中,该列名为AreaID,该列应该是该区域Tables AreaID PK的外键。 我使用这个查询,虽然它可以在添加连接到其他表的外键的时候工作,但它不会工作链接到区域表。无法添加外键MySQL

ALTER TABLE properties 
ADD FOREIGN KEY (AreaID) 
REFERENCES area(AreaID) 

我复活的错误是:

ALTER TABLE properties ADD FOREIGN KEY (AreaID) REFERENCES AREA(AreaID) 

MySQL表示:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'area(AreaID)' at line 3 

我在做什么错?

+0

在这些列有相同的数据类型? 'properties.AreaID'和'AREA.AreaID'? –

回答

0

请检查两个字段的所有特征是否相同。

+0

是这两个AreaID都是数据类型int – user1947428

+0

我删除了区域表,并且仅使用ID字段和名称字段重新生成该区域表,并且问题仍然存在。然后我删除它,并将名称更改为城镇和ID以TownID,它的工作原理。我不知道区域是否是某个SQL术语会将其搞乱,但无论我做什么都不会在表格被称为区域 – user1947428

+0

@ user1947428时不起作用。不仅仅是类型,而是特征。这意味着INT(9)不能成为INT(12)字段的FK,并且不能将UNSIGNED字段指向已签名的字段。你可以将CREATE TABLE语句粘贴到你的文章中吗? – AgentConundrum

4

areaID表示列必须有相同的数据类型长度符号/无符号属性在这两个表中。例如,在areaID表示列是INT(10)UNSIGNED然后属性表必须具有相同INT(10)UNSIGNED柱列。您可以更改列名数据类型长度签署属性必须是相同的。

试试这个ALTER声明和检查此链接MySQL Foreign Key Constraints

ALTER TABLE properties 
    ADD CONSTRAINT FK_Area 
    FOREIGN KEY (AreaID) 
    REFERENCES AREA(AreaID) 
    ON UPDATE NO ACTION 
    ON DELETE NO ACTION; 
0

检查数据库.. InnoDB的只支持外键约束

+0

我这么认为。 myisam不支持外键约束..使用innodb。它只支持foregin key。 – RaJeSh