Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL可以';不应用外键约束_Mysql_Sql_Foreign Keys - Fatal编程技术网

MySQL可以';不应用外键约束

MySQL可以';不应用外键约束,mysql,sql,foreign-keys,Mysql,Sql,Foreign Keys,我试图在phpmyadmin上创建一个数据库,但在链接表时几乎没有问题。这里有两个 第一: CREATE TABLE IF NOT EXISTS bati( code_bati CHAR(50) NOT NULL, code_parcelle CHAR(50) NOT NULL, surface_bati DOUBLE(15,2), ID_proprietaire CHAR(50), largeur DOUBLE(15,2), superficie

我试图在phpmyadmin上创建一个数据库,但在链接表时几乎没有问题。这里有两个

第一:

CREATE TABLE IF NOT EXISTS bati(
    code_bati CHAR(50) NOT NULL,
    code_parcelle CHAR(50) NOT NULL,
    surface_bati DOUBLE(15,2),
    ID_proprietaire CHAR(50),
    largeur DOUBLE(15,2),
    superficie DOUBLE(15,2),
    orientation CHAR(2),
    vocation VARCHAR(50),
    globalid VARCHAR(50),
    date_save DATE NOT NULL,
    date_last_mod DATE NOT NULL,
    ID_interne CHAR(50) NOT NULL,
    PRIMARY KEY(code_bati, code_parcelle)
)ENGINE = INNODB;
第二:

CREATE TABLE IF NOT EXISTS parcelle(
    fid_edi_parc INT UNSIGNED,
    code_lot CHAR(50),
    ID_parc CHAR(50),
    num SMALLINT(4),
    code_com CHAR(50),
    code_sec CHAR(50),
    code_sub_sec CHAR(50),
    figplan VARCHAR(50),
    code_apart VARCHAR(50),
    code_modif VARCHAR(50),
    code CHAR(50),
    code_parcelle CHAR(50),
    fid_perimetre_ppr DOUBLE(15,2),
    globalID CHAR(50),
    date_save DATE NOT NULL,
    date_last_mod DATE NOT NULL,
    ID_interne CHAR(50) NOT NULL,
    PRIMARY KEY(code, code_parcelle)
)ENGINE = INNODB;    
然后我执行以下命令来链接它们:

    ALTER TABLE bati
        ADD CONSTRAINT bati__code_parcelle__fkey 
        FOREIGN KEY (code_parcelle) 
        REFERENCES parcelle(code_parcelle);
我得到了这个错误:

#1215-无法添加外键约束

我在互联网上寻找解决方案(包括这一个),但我无法解决我的问题,你能帮我/解释为什么会出现这种错误吗


(对不起,我是英语,我是法语)

您需要在被引用的列上建立索引,或者至少它必须出现在多列索引的第一个位置

发件人:

MySQL需要外键和引用键的索引,这样外键检查可以很快,而不需要扫描表。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列

我认为这里最简单的解决方案是更改表
parcelle
主键中列的顺序,即更改:

PRIMARY KEY(code, code_parcelle)
致:

通过此更改,
code\u parcelle
现在显示在复合索引的第一个位置,这使得可以将其作为外键引用


注意:最好创建一个单独的表来存储
code\u parcelle
,然后从所有其他表中引用它。

您需要在被引用的列上创建一个索引,或者至少它必须出现在多列索引的第一个位置

发件人:

MySQL需要外键和引用键的索引,这样外键检查可以很快,而不需要扫描表。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列

我认为这里最简单的解决方案是更改表
parcelle
主键中列的顺序,即更改:

PRIMARY KEY(code, code_parcelle)
致:

通过此更改,
code\u parcelle
现在显示在复合索引的第一个位置,这使得可以将其作为外键引用


注意:最好创建一个单独的表来存储
code\u parcelle
,然后从所有其他表中引用它。

外键关系只有在引用完整主键或唯一键时才有意义。外键关系只有在引用完整主键或唯一键时才有意义。