【问题标题】:MARIADB: errno: 150 "Foreign key constraint is incorrectly formedMARIADB: errno: 150 "外键约束格式不正确
【发布时间】:2019-09-15 08:32:58
【问题描述】:

我试图在 mariadb 中创建 3 个不同的表。我使用的代码与我在本地主机中使用的代码完全相同。

表格名称是:位置、艺术家和壁画。

我首先创建位置表,然后创建艺术家表,最后尝试创建壁画表,因为这是我的外键所在的位置,但我不断收到以下错误:

ERROR 1005 (HY000): Can't create table KOMA.murals (errno: 150 "外键约束格式不正确")

创建位置表


Create TABLE location(
l_id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
country varchar(255),
city varchar(255) NOT NULL, 
address varchar(255),
a_number int(10),
zipcode int(5)
);

创建艺术家表

Create TABLE artist(
a_id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name varchar(255) NOT NULL );

创作壁画桌

CREATE table murals (
m_id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
title varchar(255) NOT NULL, 
imageurl varchar(255) NOT NULL,
about varchar(255) NOT NULL,
year INT(4),
a_id INT(11),
l_id INT(11),
FOREIGN KEY (a_id) REFERENCES artist,
FOREIGN KEY (l_id) REFERENCES location
);

我希望能够使用我的外键创建最后一个表

【问题讨论】:

    标签: mysql mariadb


    【解决方案1】:

    定义外键时,需要指向“父”表被引用的列; MySQL 不假定列具有相同的名称。

    CREATE TABLE `murals` (
        `m_id` INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        `title` VARCHAR(255) NOT NULL, 
        `imageurl` VARCHAR(255) NOT NULL,
        `about` VARCHAR(255) NOT NULL,
        `year` INT(4),
        `a_id` INT(11),
        `l_id` INT(11),
        FOREIGN KEY (`a_id`) REFERENCES `artist`(`a_id`),
        FOREIGN KEY (`l_id`) REFERENCES `location`(`l_id`)
    );
    

    【讨论】:

    • 另外,在 mariadb 中是否总是需要 ``?
    • 没问题!反引号不是必需的,但它们允许您对列名使用关键字(例如,将列名定义为注释会产生错误,但将其定义为 `comment` 将允许这样做)。我通常使用它们只是为了传达这种意图并确保我知道什么是列,什么是字符串
    猜你喜欢
    • 2017-05-29
    • 2018-06-19
    • 2018-03-02
    • 2020-07-07
    • 1970-01-01
    • 2017-04-13
    • 2018-09-04
    • 2019-09-17
    • 2020-12-16
    相关资源
    最近更新 更多