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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top