[sanniolug] Re: Chiavi esterne e MySQL (lungo)
- From: mick <mickoz@xxxxxx>
- To: sanniolug@xxxxxxxxxxxxx
- Date: Tue, 16 Sep 2003 16:32:16 +0200
Bepp0 wrote:
Ciò vuol dire che con relazioni MyISAM non potrò "godere" ;-)
> dei vantaggi derivanti dalle dichiarazioni
FOREIGN KEY (vedi integrità referenziale e altro)?
Cioè: devo cambiare il formato delle mie tabelle in InnoDB o posso
> procedere con MyISAM?
Ciao Peppì.
Allora, ti rispondo qui perché oggi a mensa non c'era sufficiente
tranquillità e non avevo sottomano la documentazione.
Se sei certo che ti serva l'integrità referenziale devi usare le tabelle
di tipo InnoDB, che sono leggermente più lente delle velocissime MyISAM.
Le MyISAM non supportano l'integrità referenziale per una scelta legata
alla velocità di funzionamento di MySQL che è un database che predilige
la leggerezza e la velocità di esecuzione.
Ergo, MyISAM è il tipo di tabella che ti serve se hai fretta ;-))
Torniamo ad InnoDB. Hai deciso che ti serve quello e vuoi sapere come fare:
come puoi leggere da
http://www.mysql.com/doc/en/Nutshell_4.0_features.html la versione
4.X.XX supporta in pieno il tipo InnoDB che viene dato come "standard
feature".
Io ti consiglio di non usare ALTER TABLE per trasformare la tua tabella
MyISAM in InnoDB ma ricorrere agli script. Visto che MOMENTANEAMENTE
stai lavorando sotto Windows, ecco cosa dovrai fare:
C:\MYSQL\BIN\> mysqldump nome_database -u utente -ppassword --opt
-ppassword > il_mio_dump.sql
(tutto su una stessa linea)
Ricorda quello che ti ho detto oggi: la password forniscila da riga di
comando, altrimenti quell'imbecille di Windows redigerà a
il_mio_dump.sql anche la richiesta della password...... Lasciamm'
perdere.... =))
A questo punto leggiti il file il_mio_dump.sql (che è un normalissimo
file di testo). Sotto la creazione della tabella c'è una voce che
dichiara il tipo della tabella. Eccoti un esempio da uno dei miei db:
DROP TABLE IF EXISTS benefici;
CREATE TABLE benefici (
id_beneficio int(10) unsigned NOT NULL default '0',
id_comune int(10) unsigned NOT NULL default '0',
frazione varchar(50) default NULL,
beneficio varchar(50) NOT NULL default '',
PRIMARY KEY (id_beneficio),
KEY id_comune (id_comune)
) TYPE=MyISAM;
Come puoi vedere, sotto la dichiarazione delle chiavi c'è il tipo di
tabella che ho creato. Sostituisci "MyISAM" con "InnoDB".
Ricordati di dichiarare tutte le "foreigner keys" e apporta tutte le
altre modifiche che ritieni necessario.
A questo punto dai:
C:\MYSQL\BIN\> mysql database -u utente -ppassword <
il_mio_dump_modificato.sql
Se tutto va bene non ci sarà nessun messaggio di errore =)
Per l'uso dell'integrità referenziale dai uno sguardo qui:
http://www.mysql.com/doc/en/InnoDB_foreign_key_constraints.html
Ti viene spiegato come impostare le regole per decidere cosa fare nel
caso di cancellazione della foreigner key.
Spero di averti tolto i dubbi. Buon lavoro! =))
Nico
--
mickoz
Registered Linux User #319941
http://counter.li.org
Other related posts:
- » [sanniolug] Re: Chiavi esterne e MySQL (lungo)