MySQL错误“无法创建表”外键约束

时间:2017-12-06 15:15:06

标签: mysql syntax-error

我正在尝试使用MySQL创建一个数据库并且我的代码有困难。我创建了一个基表,我打算在另一个表中使用一个属性作为外键,但会出现一条错误消息,说我无法创建表。我只需要帮助创建该表,因为我知道如何插入数据。

    create database aerogames_table;

CREATE TABLE
    O_DETAILS
    (
        B_Number INT NOT NULL,
        B_Name VARCHAR(60) NOT NULL,
        Order_ID INT NOT NULL,
        Order_CName VARCHAR(50) NOT NULL
    )
    engine=innodb;

CREATE TABLE
    P_DETAILS
    (
        PRO_ID INT NOT NULL PRIMARY KEY,
        Order_ID INT NOT NULL,
        CONSTRAINT fk_OrdID_this FOREIGN KEY (Order_ID) REFERENCES O_DETAILS(Order_ID),
        PRO_Seller VARCHAR (50) NOT NULL,
        PRO_Name VARCHAR (50) NOT NULL,
        PRO_Year INT NOT NULL,
        PRO_Price INT NOT NULL
    )
    engine=innodb;

1005 - 无法创建表'aerogames_table.p_details'(错误号:150)

1 个答案:

答案 0 :(得分:0)

由于这个https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

    [CONSTRAINT [symbol]] 
        FOREIGN KEY [index_name] (index_col_name, ...)
        REFERENCES tbl_name (index_col_name,...)

外键需要引用索引列(不需要是主键)所以你需要像这样在O_DETAILS.Order_ID上创建索引

    CREATE TABLE
        O_DETAILS
        (
            B_Number INT NOT NULL,
            B_Name VARCHAR(60) NOT NULL,
            Order_ID INT NOT NULL,
            Order_CName VARCHAR(50) NOT NULL,
                    KEY (Order_ID)
        )
        engine=innodb;

    CREATE TABLE
        P_DETAILS
        (
            PRO_ID INT NOT NULL PRIMARY KEY,
            Order_ID INT NOT NULL,
            CONSTRAINT fk_OrdID_this FOREIGN KEY (Order_ID) REFERENCES O_DETAILS(Order_ID),
            PRO_Seller VARCHAR (50) NOT NULL,
            PRO_Name VARCHAR (50) NOT NULL,
            PRO_Year INT NOT NULL,
            PRO_Price INT NOT NULL
        )
        engine=innodb;

当然,如果你将O_DETAILS.Order_ID作为主键,那么它也会为你创建并且这个工作