[英]MySQL engine=InnoDB error 1005 errno 150
我正在創建一個小型數據庫,這樣我就可以全面掌握MySQL和SQL。
我不確定自己在做什么錯,但我認為我會發布我的代碼,以防萬一問題是語法上的問題,而我沒有抓住。
CREATE TABLE student(
ID varchar(5) NOT NULL,
name varchar(20) NOT NULL,
dept_name varchar(20),
tot_cred numeric(3,0),
PRIMARY KEY(ID),
FOREIGN KEY(dept_name)
REFERENCES department
ON UPDATE CASCADE
ON DELETE CASCADE)
ENGINE = InnoDB;
我已經創建了包含dept_name主鍵的“部門”表。 我嘗試使用外鍵約束時不使用ENGINE = InnoDB繼續嘗試,但是-顯然-不成功。
有人可以向我解釋為什么MySQL向我拋出錯誤1005 errno 150以及如何使用最簡單的術語修復它嗎?
從mysql文檔:
1005 (ER_CANT_CREATE_TABLE)
Cannot create table. If the error message refers to error 150, table creation failed because a foreign key constraint was not correctly formed. If the error message refers to error –1, table creation probably failed because the table includes a column name that matched the name of an internal InnoDB table.
使用REFERENCES
,應同時指定被引用的表和表中被引用的行:
例:
參考部門
另外,出於性能原因,建議使用數字值作為外鍵。
確保您遵守此語法...
CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
確保您的數據類型在fk上相同...並且您必須說出它在另一張表中引用的列
我只是有這個問題。 我的解決方案是確保所引用字段的整數類型均為UNSIGNED 。 如果一個被簽名,另一個被簽名,您將得到此錯誤。
如果您要使用負數,則只需確保兩者均已簽名,但最有可能的是,您將希望未簽名。 關鍵是它們必須是同一類型。
因此,如果要在另一個表中引用主鍵,請確保主鍵是UNSIGNED Integer類型。
然后,在創建外鍵時,請確保要在其上創建的列的類型也為UNSIGNED Integer。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.