簡體   English   中英

MySQL引擎= InnoDB錯誤1005錯誤150

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM