2011-08-29 64 views
2

我試圖查找在創建我的表會導致錯誤1005MySQL的InnoDB的錯誤1005

CREATE TABLE hospitals(
    hosp_id  INT  NOT NULL AUTO_INCREMENT, 
    hosp_name  VARCHAR(100) NOT NULL, 
    hosp_address VARCHAR(100) NOT NULL, 
    hosp_ph_number VARCHAR(8) NOT NULL, 
    PRIMARY KEY(hosp_id) 
) TYPE=InnoDB CHARACTER SET=UTF8; 

CREATE TABLE transport(
    tr_regnumber VARCHAR(8) NOT NULL, 
    tr_brand  VARCHAR(15) NOT NULL, 
    tr_description VARCHAR(25), 
    hosp_id  INT, 
    PRIMARY KEY (tr_regnumber), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id) 
) TYPE=InnoDB CHARACTER SET=UTF8; 

CREATE TABLE buildings(
    build_id   INT NOT NULL AUTO_INCREMENT, 
    hosp_id   INT, 
    build_address  VARCHAR(100) NOT NULL, 
    build_description VARCHAR(25), 
    PRIMARY KEY (build_id), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id) 
) TYPE=InnoDB CHARACTER SET=UTF8; 

CREATE TABLE patients(
    pat_id   INT NOT NULL AUTO_INCREMENT, 
    pat_fullname VARCHAR(150) NOT NULL, 
    diagnosis  VARCHAR(150) NOT NULL, 
    emp_id   INT, 
    pat_ph_number VARCHAR(8), 
    pat_address VARCHAR(100), 
    hosp_id  INT, 
    pl_num   INT, 
    PRIMARY KEY (pat_id), 
    FOREIGN KEY (pl_num) REFERENCES places(pl_number), 
    FOREIGN KEY (emp_id) REFERENCES employees(emp_id), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id) 
) TYPE=InnoDB CHARACTER SET=UTF8; 

CREATE TABLE places(
    pl_number INT NOT NULL AUTO_INCREMENT, 
    pat_id  INT NOT NULL, 
    hosp_id  INT NOT NULL, 
    PRIMARY KEY (pl_number), 
    FOREIGN KEY (pat_id) REFERENCES patients(pat_id), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id) 
) TYPE=InnoDB CHARACTER SET=UTF8; 

CREATE TABLE employees(
    emp_id   INT NOT NULL AUTO_INCREMENT, 
    emp_fullname  VARCHAR(150) NOT NULL, 
    emp_position  VARCHAR(100) NOT NULL, 
    emp_ph_number  VARCHAR(8), 
    emp_home_address VARCHAR(100), 
    hosp_id   INT NOT NULL, 
    PRIMARY KEY (emp_id), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id) 
) TYPE=InnoDB CHARACTER SET=UTF8; 

下面是錯誤的:

ERROR 1005 (HY000): Can't create table 'hospital_db.patients' (errno: 150) 
ERROR 1005 (HY000): Can't create table 'hospital_db.places' (errno: 150) 

這裏是SHOW INNODB STATUS輸出:

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
110829 11:52:01 Error in foreign key constraint of table hospital_db/places: 
FOREIGN KEY (pat_id) REFERENCES patients(pat_id), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id) 
) TYPE=InnoDB CHARACTER SET=UTF8: 
Cannot resolve table name close to: 
(pat_id), 
    FOREIGN KEY (hosp_id) REFERENCES hospitals(hosp_id) 
) TYPE=InnoDB CHARACTER SET=UTF8 

我使用MySQL v5.1.49。

回答

1

您在表中創建FK「的地方」 創建此表之前。表地方被創建後表患者哪些嘗試使用尚不存在的表。 你似乎穿越了外鍵。在這種情況下,最好創建沒有FK的表,並使用ALTER TABLE來添加FK。

4

這似乎與您創建表的順序以及您擁有的外鍵依賴關係有關。

嘗試創建表後使他們像這樣前禁止外鍵檢查:

SET foreign_key_checks = 0; 
-- Your create queries here 
SET foreign_key_checks = 1; 

乾杯

3

我知道這個人是解決了,但對於Google員工在這裏,我在MySQL工作臺這樣做:

主鍵有「NOT NULL」默認選中。在子表中創建一個外鍵並將其檢查爲「不爲空」將導致此錯誤。我花了很長時間才發現這一點,因爲它是人們建議的一個例外(確保列中的所有內容與父鍵相同)。所以,只留下「不爲空」未選中的外鍵

認爲這可能會幫助人們節省一定的時間:)

+0

,關於我的評論使downvotes的人也可以說他們爲什麼呢?謝謝 –