problemi con FOREIGN KEY e visualizzazione errori

Ciao Gianni come faccio a risolvere questo problema:

CREATE TABLE PIANI

(

Mat CHAR(10) NOT NULL,

Cod_P INT UNSIGNED NOT NULL,

Cod_Esami CHAR(3) NOT NULL,

Anno SMALLINT(1) NOT NULL,

Data DATE,

Voto SMALLINT(2) DEFAULT 'NULL',

Lode CHAR(1) DEFAULT 'N',

PRIMARY KEY (Mat,Cod_P,Cod_Esami),

FOREIGN KEY (Mat) REFERENCES STUDENTI(Matricola)

ON DELETE CASCADE

ON UPDATE CASCADE,

FOREIGN KEY (Cod_Esami) REFERENCES ESAMI(Cod_Esame)

ON DELETE CASCADE

ON UPDATE CASCADE,

FOREIGN KEY (Cod_P) REFERENCES STUDENTI(Cod_Piano)<--------

ON DELETE CASCADE

ON UPDATE CASCADE

);

Domanda: Il problema di questa query stà nelle ultime 3 righe (almeno credo), infatti se tolgo l'ultimo FOREIGN KEY,MySQL mi dà una risposta positiva, altrimenti, negativa.

Come devo fare? Il problema si pone anche quando tolgo tutti i FOREIGN KEY e lascio solo quello che mi dà problemi.

L'errore che si presenta è: ERROR 1005 (HY000): Can't create table '.\piani_di_studio\piani.frm (errno: 150)

C'è una tabella in cui è possibile vedere il codice di errore che si presenta, e a cosa equivale?

Ho provato con il comando SHOW ERRORS ma mi risponde "EMPTY SET", come faccio?

GRAZIE MILLE PER GLI AIUTI

inviato 11 anni fa
noems
X 0 X

Una premessa: sai che in MySQL per usare chiavi esterne è necessario abilitare e usare le tabelle di tipo InnoDB?

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

No,infatti una delle prossime domande sarebbe stato:

a cosa serve:

1) TYPE = INNODB oppure ENGINE=INNDODB

risposto 11 anni fa
noems
X 0 X

Gli RDBMS non sono degli oggetti astratti (come vengono presentati all'università...) ma sono dei normalissimi programmi. Memorizzano i dati su dei files, la cui struttura cambia molto a seconda delle caratteristiche che deve avere il DB. MySQL ad esempio supporta diverse tipologie di memorizzazione dei dati, le più popolari sono dette "MyISAM" e "InnoDB" (ma ce ne sono altre atrettanto importanti).

Le tabelle che usano il motore (engine) MyISAM sono molto veloci nell'accesso ai dati ma ottengono questo risultato anche perché non supportano le chiavi esterne (e tutti i controlli di integrità referenziale che le query richiederebero)

Le tabelle di tipo InnoDB invece sono più lente ma supportano le foreign key.

Quando si crea una tabella, se non si specifica il tipo (engine) allora verrà creata secondo il tipo di default che normalmente è il MyISAM. Se invece si vuole costruire una tabella InnoDB allora bisogna aggiungere l'indicazione alla vine della query:

CREATE TABLE ... (
                   ...
                 ) ENGINE=InnoDB

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda