繁体   English   中英

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

[英]MySQL Error “Can't create table” Foreign Key Constraint

我正在尝试使用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)

由于这个原因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设置为主键,它也会为您创建,并且可以正常工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM