【问题标题】:Issues adding CONSTRAINT FOREIGN KEY in PhpMyAdmin在 PhpMyAdmin 中添加约束外键的问题
【发布时间】:2014-11-17 12:42:17
【问题描述】:

我正在尝试创建 5 个表(应该不会太难),但我在分配外键时遇到问题。 PhpMyAdmin 给了我这个错误:

Can't create table 'databasexx.gave' (errno: 150)

基本上所有没有外键的表都创建好了。

DROP TABLE IF EXISTS oppbygging;
CREATE TABLE oppbygging (
    gnr INT,
    dnr INT,
    ant INT,
    CONSTRAINT dnr_grn_pk PRIMARY KEY (gnr, dnr)
)   ENGINE=InnoDB;

DROP TABLE IF EXISTS onske;
CREATE TABLE onske (
    onr INT,
    pnr INT,
    gnr INT,
    prioriet INT,
    ferdig INT,
    CONSTRAINT pnr_gnr_pk PRIMARY KEY (pnr, gnr)
)   ENGINE=InnoDB;

DROP TABLE IF EXISTS person;
CREATE TABLE person (
    pnr INT,
    fornavn VARCHAR(64),
    etternavn VARCHAR(64),
    fdato DATE,
    CONSTRAINT pnr_pk PRIMARY KEY (pnr),
    CONSTRAINT person_pnr_fk FOREIGN KEY (pnr) REFERENCES onske(pnr)
)   ENGINE=InnoDB;

DROP TABLE IF EXISTS gave;
CREATE TABLE gave
(
    gnr int,
    navn varchar (255) UNIQUE,
    prod_tid int NOT NULL,
    CONSTRAINT gnr_pk PRIMARY KEY (gnr),
    CONSTRAINT gave_gnr_fk FOREIGN KEY (gnr) REFERENCES oppbygging(gnr),
    CONSTRAINT gave_gnr_fk FOREIGN KEY (gnr) REFERENCES onske(gnr)

)   ENGINE=InnoDB;

DROP TABLE IF EXISTS del;
CREATE TABLE del (
    dnr INT,
    navn VARCHAR(64),
    lager_ant INT NOT NULL,
    CONSTRAINT dnr_pk PRIMARY KEY (dnr),
    CONSTRAINT del_dnr_fk FOREIGN KEY (dnr) REFERENCES oppbygging(dnr)

)   ENGINE=InnoDB;

我确信我犯了某种明显的错误,但我就是想不通。任何帮助将不胜感激。

这里是关系视图,忽略 Eiendom 表:

【问题讨论】:

  • 外键必须引用 complete 主键。您不能在“部分 PK”上获得参考。所以person 需要包含列pnr gnr 才能引用onske
  • 感谢您的快速回复!你是对的,那是一个错误。但是我在尝试运行代码i.imgur.com/1gIHn2O.png时仍然得到这个相关代码现在看起来像这样i.imgur.com/wUZrOrb.png

标签: mysql phpmyadmin


【解决方案1】:

使用外键创建另一个表,外键 指定必须是至少一个表的主键 已经创建的,例如

使用主键创建表 1:

CREATE TABLE PERSONS(
PERSON_ID INT(10),
FNAME VARCHAR(20)NOT NULL,
LNAME VARCHAR(20),
DOB DATETIME,
AMOUNTPAID DECIMAL(15,2),
PRIMARY KEY(PERSON_ID)
);

然后使用外键创建表 2:

CREATE TABLE COMMENTS(
COMMENTID INT AUTO_INCREMENT,    
COMMENTS VARCHAR(500),
PERSON_ID INT(10),
PRIMARY KEY(COMMENTID),
FOREIGN KEY (PERSON_ID) REFERENCES PERSONS(PERSON_ID)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2019-06-04
    • 2012-03-18
    • 2020-10-23
    • 2019-10-09
    • 2013-08-12
    • 2020-07-09
    相关资源
    最近更新 更多