MySQL错误1005:Can';t创建表(错误号:150)

MySQL错误1005:Can';t创建表(错误号:150),mysql,foreign-keys,Mysql,Foreign Keys,我是mysql的初学者,我不明白我的错误 “membre”和“club”的外键有问题 CREATE TABLE club( id INT主键自动递增, nom VARCHAR(255)唯一值不为空, 指数俱乐部(nom)指数(nom),, 地址id INT不为空, nom_du_responsible VARCHAR(255)NULL, 外键俱乐部地址id fk(地址id)参考地址(id) ); 创建表membre( id INT主键自动递增, nom VARCHAR(255)不为空, prén

我是mysql的初学者,我不明白我的错误 “membre”和“club”的外键有问题

CREATE TABLE club(
id INT主键自动递增,
nom VARCHAR(255)唯一值不为空,
指数俱乐部(nom)指数(nom),,
地址id INT不为空,
nom_du_responsible VARCHAR(255)NULL,
外键俱乐部地址id fk(地址id)参考地址(id)
);
创建表membre(
id INT主键自动递增,
nom VARCHAR(255)不为空,
prénom VARCHAR(255)不为空,
地址id INT不为空,
club_id INT不为空,
rang_限定INT不为空,
numéro_étéléphone VARCHAR(255)NULL,
courriel VARCHAR(255)唯一NULL,
索引membre_courriel_索引(courriel),
注意:双方的数据不为空,
注意:双方的义务不为空,
注意:当事方为NULL INT NOT NULL,
外键membre_address_id_fk(address_id)引用了address(id),
外键membre_club_id_fk(club_id)参考俱乐部(id),
外键记忆范围限定fk(范围限定)参考范围限定,
指数名称(nom,prénom),
约束方检查(注意方检查>=0),
约束方费用检查(nb方费用>=0),
约束参与方为空检查(注意:参与方为空>=0)
);
创建表tournoi(
id INT主键自动递增,
nom VARCHAR(255)不为空,
指数tournoi_nom_指数(nom),
club_id INT不为空,
日期,但日期不为空,
日期\财务日期不为空,
外键tournoi_俱乐部id_fk(俱乐部id)参考俱乐部(id),
约束nom_date_unq UNIQUE(nom,date_deébut)
);
创建表partie(
id INT主键自动递增,
membre1_id INT不为空,
membre2_id INT不为空,
résultat INT NULL,
日期但日期为空,
但时间是空的,
id_tournoi INT不为空,
外键partie_membre1_id_fk(membre1_id)引用membre(id),
外键partie_membre2_id_fk(membre2_id)引用membre(id),
外键partie_tournoi_id_fk(id_tournoi)引用tournoi(id),
索引membres_INDEX(membre1_id,membre2_id),

约束résultat_chk CHECK(résultat>=0和résultat必须更改create语句的顺序。
第一个表
范围
和第二个表
地址
,因为其他表都引用了这些表:

CREATE TABLE rang(
    qualification INT PRIMARY KEY AUTO_INCREMENT,
    description VARCHAR(255) UNIQUE NULL        
);

CREATE TABLE adresse(
    id INT PRIMARY KEY AUTO_INCREMENT,
    adresse VARCHAR(255) NOT NULL,
    rue VARCHAR(255) NOT NULL,
    ville VARCHAR(255) NOT NULL,
    code_postal CHAR(6) NULL,
    INDEX adresse_code_index (code_postal),
    province_état CHAR(3) NULL,
    pays CHAR(2) NOT NULL,

    CONSTRAINT code_postal_chk CHECK (code_postal REGEXP '^[A-Z] 
        [[:digit:]][A-Z][[:digit:]][A-Z][[:digit:]]$')
);

CREATE TABLE club(
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(255) UNIQUE NOT NULL,
    INDEX club_nom_index (nom),
    adresse_id INT NOT NULL,
    nom_du_responsable VARCHAR(255) NULL,

    FOREIGN KEY club_adresse_id_fk (adresse_id) REFERENCES adresse(id)
);

CREATE TABLE membre(
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(255) NOT NULL,
    prénom VARCHAR(255) NOT NULL,
    adresse_id INT NOT NULL,
    club_id INT NOT NULL,
    rang_qualification INT NOT NULL,
    numéro_téléphone VARCHAR(255) NULL,
    courriel VARCHAR(255) UNIQUE NULL,
    INDEX membre_courriel_index (courriel),
    nb_parties_gagnées INT NOT NULL,
    nb_parties_perdues INT NOT NULL,
    nb_parties_nulles INT NOT NULL,

    FOREIGN KEY membre_adresse_id_fk (adresse_id) REFERENCES adresse(id),
    FOREIGN KEY membre_club_id_fk (club_id) REFERENCES club(id),
    FOREIGN KEY membre_rang_qualification_fk (rang_qualification) REFERENCES rang(qualification),

    INDEX nom_prénom_membre_index (nom, prénom),
    CONSTRAINT parties_gagnées_chk CHECK (nb_parties_gagnées >= 0),
    CONSTRAINT parties_perdues_chk CHECK (nb_parties_perdues >= 0),
    CONSTRAINT parties_nulles_chk CHECK(nb_parties_nulles >= 0)
);

CREATE TABLE tournoi(
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(255) NOT NULL,
    INDEX tournoi_nom_index (nom),
    club_id INT NOT NULL,
    date_début DATE NOT NULL,
    date_fin DATE NOT NULL,

    FOREIGN KEY tournoi_club_id_fk (club_id) REFERENCES club(id),

    CONSTRAINT nom_date_unq UNIQUE (nom, date_début)
);

CREATE TABLE partie(
    id INT PRIMARY KEY AUTO_INCREMENT,
    membre1_id INT NOT NULL,
    membre2_id INT NOT NULL,
    résultat INT NULL,
    date_début DATE NULL,
    heure_début TIME NULL,
    id_tournoi INT NOT NULL,

    FOREIGN KEY partie_membre1_id_fk (membre1_id) REFERENCES membre(id),
        FOREIGN KEY partie_membre2_id_fk (membre2_id) REFERENCES membre(id),
    FOREIGN KEY partie_tournoi_id_fk (id_tournoi) REFERENCES tournoi(id),

    INDEX membres_index(membre1_id, membre2_id),
    CONSTRAINT résultat_chk CHECK (résultat >= 0 AND résultat <= 2),
    CONSTRAINT membres_unq UNIQUE (membre1_id, membre2_id),
    CONSTRAINT date_heure_unq UNIQUE (date_début, heure_début)
);
创建表范围(
鉴定INT主键自动增量,
description VARCHAR(255)唯一NULL
);
创建表地址(
id INT主键自动递增,
adresse VARCHAR(255)不为空,
rue VARCHAR(255)不为空,
ville VARCHAR(255)不为空,
代码\邮政字符(6)空,
索引地址代码索引(邮政编码),
省(3)空,
字符(2)不为空,
约束代码邮政chk检查(代码邮政REGEXP'^[A-Z]
[[:数位:][A-Z][[:数位:][A-Z][[:数位:][]$”)
);
创建桌面俱乐部(
id INT主键自动递增,
nom VARCHAR(255)唯一值不为空,
指数俱乐部(nom)指数(nom),,
地址id INT不为空,
nom_du_responsible VARCHAR(255)NULL,
外键俱乐部地址id fk(地址id)参考地址(id)
);
创建表membre(
id INT主键自动递增,
nom VARCHAR(255)不为空,
prénom VARCHAR(255)不为空,
地址id INT不为空,
club_id INT不为空,
rang_限定INT不为空,
numéro_étéléphone VARCHAR(255)NULL,
courriel VARCHAR(255)唯一NULL,
索引membre_courriel_索引(courriel),
注意:双方的数据不为空,
注意:双方的义务不为空,
注意:当事方为NULL INT NOT NULL,
外键membre_address_id_fk(address_id)引用了address(id),
外键membre_club_id_fk(club_id)参考俱乐部(id),
外键记忆范围限定fk(范围限定)参考范围限定,
指数名称(nom,prénom),
约束方检查(注意方检查>=0),
约束方费用检查(nb方费用>=0),
约束参与方为空检查(注意:参与方为空>=0)
);
创建表tournoi(
id INT主键自动递增,
nom VARCHAR(255)不为空,
指数tournoi_nom_指数(nom),
club_id INT不为空,
日期,但日期不为空,
日期\财务日期不为空,
外键tournoi_俱乐部id_fk(俱乐部id)参考俱乐部(id),
约束nom_date_unq UNIQUE(nom,date_deébut)
);
创建表partie(
id INT主键自动递增,
membre1_id INT不为空,
membre2_id INT不为空,
résultat INT NULL,
日期但日期为空,
但时间是空的,
id_tournoi INT不为空,
外键partie_membre1_id_fk(membre1_id)引用membre(id),
外键partie_membre2_id_fk(membre2_id)引用membre(id),
外键partie_tournoi_id_fk(id_tournoi)引用tournoi(id),
索引membres_INDEX(membre1_id,membre2_id),

约束résultat_chk检查(résultat>=0且résultat您无法引用尚未创建的表;请将
adrese
rang
移动到脚本的开头。您能否…提供引用这些外键的实际错误?您必须先创建
adrese
表,然后才能在
俱乐部中为其创建外键
membre
表。更改运行CreateSO的顺序只需将
Adrese
表移到顶部即可。仅供参考,
检查
约束在MySQL 8.0之前被忽略。
CREATE TABLE rang(
    qualification INT PRIMARY KEY AUTO_INCREMENT,
    description VARCHAR(255) UNIQUE NULL        
);

CREATE TABLE adresse(
    id INT PRIMARY KEY AUTO_INCREMENT,
    adresse VARCHAR(255) NOT NULL,
    rue VARCHAR(255) NOT NULL,
    ville VARCHAR(255) NOT NULL,
    code_postal CHAR(6) NULL,
    INDEX adresse_code_index (code_postal),
    province_état CHAR(3) NULL,
    pays CHAR(2) NOT NULL,

    CONSTRAINT code_postal_chk CHECK (code_postal REGEXP '^[A-Z] 
        [[:digit:]][A-Z][[:digit:]][A-Z][[:digit:]]$')
);

CREATE TABLE club(
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(255) UNIQUE NOT NULL,
    INDEX club_nom_index (nom),
    adresse_id INT NOT NULL,
    nom_du_responsable VARCHAR(255) NULL,

    FOREIGN KEY club_adresse_id_fk (adresse_id) REFERENCES adresse(id)
);

CREATE TABLE membre(
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(255) NOT NULL,
    prénom VARCHAR(255) NOT NULL,
    adresse_id INT NOT NULL,
    club_id INT NOT NULL,
    rang_qualification INT NOT NULL,
    numéro_téléphone VARCHAR(255) NULL,
    courriel VARCHAR(255) UNIQUE NULL,
    INDEX membre_courriel_index (courriel),
    nb_parties_gagnées INT NOT NULL,
    nb_parties_perdues INT NOT NULL,
    nb_parties_nulles INT NOT NULL,

    FOREIGN KEY membre_adresse_id_fk (adresse_id) REFERENCES adresse(id),
    FOREIGN KEY membre_club_id_fk (club_id) REFERENCES club(id),
    FOREIGN KEY membre_rang_qualification_fk (rang_qualification) REFERENCES rang(qualification),

    INDEX nom_prénom_membre_index (nom, prénom),
    CONSTRAINT parties_gagnées_chk CHECK (nb_parties_gagnées >= 0),
    CONSTRAINT parties_perdues_chk CHECK (nb_parties_perdues >= 0),
    CONSTRAINT parties_nulles_chk CHECK(nb_parties_nulles >= 0)
);

CREATE TABLE tournoi(
    id INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(255) NOT NULL,
    INDEX tournoi_nom_index (nom),
    club_id INT NOT NULL,
    date_début DATE NOT NULL,
    date_fin DATE NOT NULL,

    FOREIGN KEY tournoi_club_id_fk (club_id) REFERENCES club(id),

    CONSTRAINT nom_date_unq UNIQUE (nom, date_début)
);

CREATE TABLE partie(
    id INT PRIMARY KEY AUTO_INCREMENT,
    membre1_id INT NOT NULL,
    membre2_id INT NOT NULL,
    résultat INT NULL,
    date_début DATE NULL,
    heure_début TIME NULL,
    id_tournoi INT NOT NULL,

    FOREIGN KEY partie_membre1_id_fk (membre1_id) REFERENCES membre(id),
        FOREIGN KEY partie_membre2_id_fk (membre2_id) REFERENCES membre(id),
    FOREIGN KEY partie_tournoi_id_fk (id_tournoi) REFERENCES tournoi(id),

    INDEX membres_index(membre1_id, membre2_id),
    CONSTRAINT résultat_chk CHECK (résultat >= 0 AND résultat <= 2),
    CONSTRAINT membres_unq UNIQUE (membre1_id, membre2_id),
    CONSTRAINT date_heure_unq UNIQUE (date_début, heure_début)
);