2017-03-18 206 views
0

嘗試創建「訂單」表時,出現「錯誤代碼:1215.無法添加外鍵約束」。無法添加外鍵約束MySQL Workbench

credit_cards表:

CREATE TABLE credit_cards (
    customer VARCHAR(30), 
    card_no CHAR(16), 
    PRIMARY KEY (customer, card_no), 
    FOREIGN KEY (customer) REFERENCES customers(username)); 

訂單表:

CREATE TABLE orders (
    order_no INT AUTO_INCREMENT, 
    customer VARCHAR(30) NOT NULL, 
    date_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    credit_card CHAR(16) NOT NULL, 
    PRIMARY KEY (order_no), 
    FOREIGN KEY (customer) 
     REFERENCES customers (username), 
    FOREIGN KEY (credit_card) 
     REFERENCES credit_cards (card_no)); 

SHOW ENGINE INNODB STATUS報告說,這個問題是FOREIGN KEY (credit_card) REFERENCES credit_cards(card_no))

我讀了一堆的解決問題,仍然可以不知道。我正在使用MySQL Workbench。謝謝。

+0

我不知道,但嘗試讓顧客列credit_cards表爲NOT NULL –

+0

@abdullah那不是隱含的,因爲它是主鍵? –

+0

是的,你是對的 –

回答

0

您需要引用全部主鍵(或唯一鍵)關係中的鍵。我建議:

CREATE TABLE credit_cards (
    credit_card_id int auto_increment primary key, 
    customer VARCHAR(30), 
    card_no CHAR(16), 
    UNIQUE KEY (customer, card_no), 
    FOREIGN KEY (customer) REFERENCES customers(username)); 
orders table: 

CREATE TABLE orders (
    order_no INT AUTO_INCREMENT, 
    customer VARCHAR(30) NOT NULL, 
    date_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    credit_card_id int NOT NULL, 
    PRIMARY KEY (order_no), 
    FOREIGN KEY (customer) 
     REFERENCES customers (username), 
    FOREIGN KEY (credit_card_id) 
     REFERENCES credit_cards (credit_card_id)); 
+0

啊當然是。我想我從ER模型轉到表格時沒有正確地執行一個步驟,因爲那樣我就會擁有兩次「用戶名」。謝謝。 –