2014-11-14 78 views
3

我花了3個小時尋找我的問題的答案(在這裏和谷歌),我不明白爲什麼我得到這個錯誤後,我嘗試添加「事件「表。SQL錯誤#1215 - 無法添加外鍵約束

兩個表:

CREATE TABLE user (
      id INT NOT NULL AUTO_INCREMENT, 
      u_name VARCHAR(32) NOT NULL, 
      u_pass VARCHAR(32) NOT NULL, 
      sub_status INT(3) NOT NULL, 
      f_name VARCHAR(32), 
      l_name VARCHAR(32), 
      email VARCHAR(32), 
      PRIMARY KEY(id, u_name, email) 
    ) ENGINE=InnoDB; 

    CREATE TABLE events (
     u_name VARCHAR(32) NOT NULL, 
     event_name VARCHAR(32), 
     event_date VARCHAR(32), 
     comment VARCHAR(255), 
     PRIMARY KEY(u_name, event_name), 
     FOREIGN KEY(u_name) REFERENCES user(u_name) 
     ON UPDATE CASCADE 
     ON DELETE CASCADE 
    ) ENGINE=InnoDB; 

據我所看到的,有沒有拼寫錯誤,u_name是表之間的類型完全相同的,這是兩個表中的主鍵。

mysql版本是5.6

幫助非常感謝,我提前感謝您。讓我知道是否還有其他我需要包括。

編輯︰原來我的查詢做的工作,但在不同版本的SQL/MySQL。 jemz的答案適用於不同版本的sql。

回答

1
CREATE TABLE `user` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `u_name` VARCHAR(32) NOT NULL, 
    `u_pass` VARCHAR(32) NOT NULL, 
    `sub_status` INT(3) NOT NULL, 
    `f_name` VARCHAR(32) NULL DEFAULT NULL, 
    `l_name` VARCHAR(32) NULL DEFAULT NULL, 
    `email` VARCHAR(32) NOT NULL DEFAULT '', 
    PRIMARY KEY (`id`, `u_name`, `email`), 
    INDEX `u_name` (`u_name`) 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 
; 


CREATE TABLE `events` (
    `u_name` VARCHAR(32) NOT NULL, 
    `event_name` VARCHAR(32) NOT NULL DEFAULT '', 
    `event_date` VARCHAR(32) NULL DEFAULT NULL, 
    `comment` VARCHAR(255) NULL DEFAULT NULL, 
    PRIMARY KEY (`u_name`, `event_name`), 
    CONSTRAINT `FK_events_user` FOREIGN KEY (`u_name`) REFERENCES `user` (`u_name`) ON UPDATE CASCADE ON DELETE CASCADE 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 
; 
+0

謝謝jemz回答這麼快。雖然你的桌子工作正常,但我很好奇我的爲什麼不工作?我一直在按照我的演講幻燈片100%,仍然無法使其工作。再次感謝你。 – seriouslyttt

+0

添加唯一索引,以便您可以添加外鍵...如果這能解決您的問題,請接受我的答案。 – jemz

相關問題