错误代码:1215无法添加外键约束

时间:2014-01-13 11:24:37

标签: java mysql sql constraints

我正在尝试创建一个数据库但每次尝试这样做时都会收到错误消息:

1215 Cannot add foreign key constraint.  

我整个上午都在寻找解决方案,但找不到任何有助于解决问题的方法,这是我的代码:

CREATE TABLE IF NOT EXISTS Lid (
        lid_id          INT(2)      NOT NULL,
        naam            VARCHAR(45) NOT NULL,
        email           VARCHAR(45) NOT NULL,
        tel_nummer      VARCHAR(45) NOT NULL,
        score           INT(2)      NOT NULL,
        expertise       VARCHAR(45) NOT NULL,
        team_id         INT(2)      NOT NULL,
primary key (lid_id),
foreign key (team_id) references Team(team_id));

CREATE TABLE IF NOT EXISTS Team (
        team_id     INT(2)          NOT NULL,
        naam        VARCHAR(45) NOT NULL,
        score       INT(2)          NOT NULL,
        captain     INT(2)          NOT NULL,
        expertise   VARCHAR(45) NOT NULL,
primary key (team_id),
foreign key (captain) references Lid(lid_id));

6 个答案:

答案 0 :(得分:1)

要创建FOREIGN KEY,您需要创建源和目标字段和表。

示例:为了从表b_id中的字段A创建外键到表id中的字段B,首先需要创建表A和B它的字段,在这种情况下,您可以首先定义B,然后使用其外键定义A.

在您的情况下:您需要使用ALTER TABLE在表定义之后创建外键,因为两个表都相互引用。

所以你的代码应该是这样的:

/* DEFINE TABLES */

CREATE TABLE IF NOT EXISTS Lid (
        lid_id          INT(2)      NOT NULL,
        naam            VARCHAR(45) NOT NULL,
        email           VARCHAR(45) NOT NULL,
        tel_nummer      VARCHAR(45) NOT NULL,
        score           INT(2)      NOT NULL,
        expertise       VARCHAR(45) NOT NULL,
        team_id         INT(2)      NOT NULL,
primary key (lid_id));

CREATE TABLE IF NOT EXISTS Team (
        team_id     INT(2)          NOT NULL,
        naam        VARCHAR(45) NOT NULL,
        score       INT(2)          NOT NULL,
        captain     INT(2)          NOT NULL,
        expertise   VARCHAR(45) NOT NULL,
primary key (team_id));

/* CREATE FOREIGN KEYS */
ALTER TABLE Lid  ADD FOREIGN KEY (team_id)  REFERENCES Team(team_id);
ALTER TABLE Team ADD FOREIGN KEY (captain)  REFERENCES Lid(lid_id);

您可以在SQL FOREIGN KEY Constraint

中查看更多解释和示例

答案 1 :(得分:0)

您在创建引用表之前创建外键。 您最好创建两个表,然后使用ALTER TABLE语句添加外键约束。

答案 2 :(得分:0)

首先创建团队表,然后创建一个盖子。 mysql基本上告诉你的是它不知道你引用的team_id字段作为外键约束。

答案 3 :(得分:0)

<强> STEP-1

CREATE TABLE IF NOT EXISTS Lid (
    lid_id          INT(2)      NOT NULL PRIMARY KEY,
    naam            VARCHAR(45) NOT NULL,
    email           VARCHAR(45) NOT NULL,
    tel_nummer      VARCHAR(45) NOT NULL,
    score           INT(2)      NOT NULL,
    expertise       VARCHAR(45) NOT NULL,
    team_id         INT(2)      NOT NULL
)

<强> STEP-2

CREATE TABLE IF NOT EXISTS Team (
    team_id     INT(2)          NOT NULL PRIMARY KEY,
    naam        VARCHAR(45) NOT NULL,
    score       INT(2)          NOT NULL,
    captain     INT(2)          NOT NULL,
    expertise   VARCHAR(45) NOT NULL
)

<强> STEP-3

ALTER TABLE lid ADD FOREIGN KEY ( team_id ) REFERENCES team( team_id ) 

答案 4 :(得分:0)

您可以禁止在会话中临时检查外键的有效性(用于定义表和插入数据):

set foreign_key_checks=0;

然后使用以下命令恢复它:

set foreign_key_checks=1;

答案 5 :(得分:-1)

试试这个

CREATE TABLE IF NOT EXISTS Lid (
        lid_id          INT(2)      NOT NULL,
        naam            VARCHAR(45) NOT NULL,
        email           VARCHAR(45) NOT NULL,
        tel_nummer      VARCHAR(45) NOT NULL,
        score           INT(2)      NOT NULL,
        expertise       VARCHAR(45) NOT NULL,
        team_id         INT(2)      NOT NULL,
primary key (lid_id));

CREATE TABLE IF NOT EXISTS Team (
        team_id     INT(2)          NOT NULL,
        naam        VARCHAR(45) NOT NULL,
        score       INT(2)          NOT NULL,
        captain     INT(2)          NOT NULL,
        expertise   VARCHAR(45) NOT NULL,
primary key (team_id),
foreign key (captain) references Lid(lid_id));

ALTER TABLE Lid ADD foreign key (team_id) references Team(team_id);