2014-01-13 60 views
2

我想創建一個數據庫,但每次我試圖這樣做的時候,我得到錯誤信息外鍵約束:錯誤代碼:1215無法添加

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)); 

回答

0

您正在創建引用表之前創建外鍵。 您最好創建兩個表,然後使用ALTER TABLE語句添加外鍵約束。

1

要創建FOREIGN KEY,您需要同時創建源和目標字段和表。

例子:爲了打造從田間b_idA的外鍵字段的表Bid您首先需要創建它的字段的表A和B,在這種情況下,你可以定義B首先和然後用它的外鍵。

你的情況:你需要在表定義之後創建外鍵,使用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

試試這個

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); 
0

首先創建團隊表,然後創建蓋一個。 MySQL基本上告訴你的是,它不知道你引用的外鍵約束的team_id字段。

+0

但球隊也有一個蓋子外鍵 – ysth

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) 
+0

非常感謝現在編輯我的代碼以簡單的方式顯示它。 – shubomb

0

可以抑制有效性的檢查橫生鍵暫時在一個會話(包括用於定義表和插入數據的目的)使用:

set foreign_key_checks=0; 

然後將它與恢復:

set foreign_key_checks=1; 
相關問題