Errore chiave esterno su MySQL Crea Table Dichiarazione (ERR: 150)
-
27-10-2019 - |
Domanda
Sento di aver provato tutto il possibile su una coppia molto semplice di dichiarazioni di Crea tabella.
I tipi corrispondono, ho provato a usare il motore = innodb, ecc. E sono sconcertato perché sto ricevendo l'errore chiave estero.
Sono stato lontano da SQL da un po 'di tempo, quindi questo è probabilmente facile.
mysql> CREATE TABLE foo_ent(yyy_no VARCHAR(80),
-> zoo VARCHAR(80),
-> PRIMARY KEY (yyy_no));
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE cat_ent(some_item INTEGER,
-> yyy_no VARCHAR(80),
-> apple DECIMAL(6,2),
-> PRIMARY KEY (some_item),
-> FOREIGN KEY (yyy_no) REFERENCES foo_ent);
ERROR 1005 (HY000): Can't create table 'test.cat_ent' (errno: 15
0)
Ci scusiamo per i nomi delle variabili poveri, sicuro per le cose da parte dell'azienda.
Soluzione
Non fai riferimento a un campo, solo una tabella, che non è corretta.
...
foreign key (yyy_no) references foo_ent(yyy_no)
E secondo il tuo numero di errore, afferma anche la documentazione MySQL;
Se ricrea una tabella che è stata eliminata, deve avere una definizione che è conforme ai vincoli di chiave estera che lo fanno riferimento. Deve avere i nomi e i tipi di colonne giusti e deve avere indici sulle chiavi di riferimento, come indicato in precedenza. Se questi non sono soddisfatti, MySQL restituisce il numero di errore 1005 e si riferisce all'errore 150 nel messaggio di errore.
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
Altri suggerimenti
Dovresti fornire esplicitamente il nome della colonna di riferimento:
CREATE TABLE cat_ent
(
some_item INTEGER NOT NULL,
yyy_non VARCHAR(80),
apple DECIMAL(6,2),
PRIMARY KEY (some_item),
FOREIGN KEY (yyy_non) REFERENCES foo_ent(yyy_no)
);
Prendi in considerazione la riscrittura della tua dichiarazione chiave estera per elencare esplicitamente la colonna in foo_ent su cui si desidera dire:
Crea tabella cat_ent (some_item integer, yyy_no varchar (80), apple decimal (6,2), chiave primaria (qualche_item), chiave straniera (yyy_no) riferimenti foo_ent (yyy_no)) motore = innodB;
per me va bene.