Mysql

錯誤程式碼:1215。無法添加外鍵約束

  • May 29, 2021

我正在 Mysql Workbench 上創建一個 DBSM,但是當 Itry 創建最後一個表時,我收到一個錯誤,因為它無法添加外鍵,但我不明白為什麼,因為子鍵具有相同的數據類型和排序規則父鍵和名稱不重複。

這是兩個表的程式碼:

CREATE TABLE PRESTITO(
MATRICOLA_U INT,
CODICE_LIB SMALLINT(4),
DATA_P DATE,
DATA_R DATE,
N_DIP SMALLINT(2), 

PRIMARY KEY(CODICE_LIB),

FOREIGN KEY(MATRICOLA_U) REFERENCES UTENTI(MATRICOLA),
FOREIGN KEY(CODICE_LIB) REFERENCES LIBRI(CODICE_L)
);

CREATE TABLE DIPARTIMENTO(
NUMERO_DIP SMALLINT(2),
NOME_DIP VARCHAR(50) NOT NULL,
INDIRIZZO_DIP VARCHAR(50),

PRIMARY KEY(NUMERO_DIP),
FOREIGN KEY (NUMERO_DIP) REFERENCES PRESTITO(N_DIP)
);

有人可以幫忙嗎?非常感謝你!

在您的情況下,Eversy 引用的列 N_DIP 必須被索引,我將其添加為KEY(N_DIP). PRiMARY KEY 當然是有索引的,所以只要你堅持使用它們就沒有問題。

使用您也可以使用的組合鍵,您需要表中的列數與組合鍵中的列數相同

CREATE TABLE PRESTITO(
MATRICOLA_U INT,
CODICE_LIB SMALLINT(4),
DATA_P DATE,
DATA_R DATE,
N_DIP SMALLINT(2), 
KEY (N_DIP),
PRIMARY KEY(CODICE_LIB),

FOREIGN KEY(MATRICOLA_U) REFERENCES UTENTI(MATRICOLA),
FOREIGN KEY(CODICE_LIB) REFERENCES LIBRI(CODICE_L)
);

CREATE TABLE DIPARTIMENTO(
NUMERO_DIP SMALLINT(2),
NOME_DIP VARCHAR(50) NOT NULL,
INDIRIZZO_DIP VARCHAR(50),

PRIMARY KEY(NUMERO_DIP),
FOREIGN KEY (NUMERO_DIP) REFERENCES PRESTITO(N_DIP)
);

引用自:https://dba.stackexchange.com/questions/292456