【问题标题】:Errors in compete table foreign key竞争表外键错误
【发布时间】:2022-01-16 14:13:40
【问题描述】:

我在“竞争”表中不断收到关于我的外键的错误。我一直在尝试查找问题所在,但这些示例似乎都不是我的问题。谁能帮我吗?这是我不断收到的错误:

ERROR 1005 (HY000): Can't create table `database`.`compete` (errno: 150 "Foreign key constraint is incorrectly formed")

这是我的代码。

CREATE TABLE athlete (
        athlete_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        country TINYTEXT NOT NULL,
        name TINYTEXT NOT NULL,
        birthdate DATE NOT NULL,
        age INT UNSIGNED NOT NULL,
        height_inch INT UNSIGNED,
        weight_lbs INT UNSIGNED,
        PRIMARY KEY (athlete_id)
    );
    
    CREATE TABLE sport (
        sport_id INT UNSIGNED NOT NULL,
        sport TINYTEXT NOT NULL,
        PRIMARY KEY (sport_id)
    );
    
    CREATE TABLE olympics (
        olympics_id INT UNSIGNED NOT NULL,
        season TINYTEXT NOT NULL,
        year YEAR NOT NULL,
        city TINYTEXT NOT NULL,
        PRIMARY KEY (olympics_id)
    );  
    
    CREATE TABLE sport_events (
        sport_id INT UNSIGNED NOT NULL,
        event_id INT UNSIGNED NOT NULL,
        event TINYTEXT NOT NULL,
        PRIMARY KEY (sport_id, event_id),
        FOREIGN KEY (sport_id) REFERENCES sport (sport_id)
    );
    
    CREATE TABLE athlete_sport (
        athlete_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        sport_id INT UNSIGNED NOT NULL,
        PRIMARY KEY (athlete_id),
        FOREIGN KEY (athlete_id) REFERENCES athlete (athlete_id),
        FOREIGN KEY (sport_id) REFERENCES sport (sport_id)
    );
    
    CREATE TABLE compete (
        athlete_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        olympics_id INT UNSIGNED NOT NULL,
        event_id INT UNSIGNED NOT NULL,
        medal TINYTEXT,
        PRIMARY KEY (athlete_id),
        FOREIGN KEY (athlete_id) REFERENCES athlete (athlete_id),
        FOREIGN KEY (olympics_id) REFERENCES olympics (olympics_id),
        FOREIGN KEY (event_id) REFERENCES sport_events (event_id)   
    );

【问题讨论】:

    标签: mysql mariadb foreign-keys schema


    【解决方案1】:

    删除并重新创建sport_events 表,并将event_id 列用作其主键的第一列。

    CREATE TABLE sport_events (
        sport_id INT UNSIGNED NOT NULL,
        event_id INT UNSIGNED NOT NULL,
        event TINYTEXT NOT NULL,
        PRIMARY KEY (event_id,sport_id),
        FOREIGN KEY (sport_id) REFERENCES sport (sport_id)
    );
    

    【讨论】:

      【解决方案2】:

      sport_events 表中,您已声明具有两列的主键。 PRIMARY KEY (sport_id, event_id)

      但在 compete 表中,您添加了 FOREIGN KEY (event_id) REFERENCES sport_events (event_id) 和单列。

      这就是为什么你得到 errno: 150 "Foreign key constraint is incorrectly formed" 错误。

      首先删除complete 表,然后删除sport_events 表。然后更改sport_events表中的主键PRIMARY KEY (event_id)

      或者,只需切换PRIMARY KEY (event_id, sport_id)。这将起作用。

      然后创建两个表。

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 2019-04-25
        • 2019-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-31
        • 1970-01-01
        相关资源
        最近更新 更多