Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - [MySQL]Verificare i REFERENCES su una tabella InnoDB
Forum - Altri Linguaggi - [MySQL]Verificare i REFERENCES su una tabella InnoDB

Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 15:40
Giovedì, 16/04/2009
Salve ragazzi, scusate il disturbo. Sapete per caso se esiste un modo per verificare se una tabella InnoDB utilizza i references su altre tabelle (versione 5.1 di MySQL)? In pratica devo sviluppare un sw che lavori su tabelle dell'utente (e quindi non create da me). Io penso che ci sia perchè altrimenti come fa il motore a ricostruire la tabella quando si fanno i dump? Usando explain e describe, però, non riesco a cavare un ragno dal buco... grazie in anticipo!

PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 22:28
Sabato, 09/05/2009
Ti riferisci forse alla SHOW (SCHEMA) ?

PM Quote
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 23:04
Sabato, 09/05/2009
In pratica, data una tabella InnoDB I, vorrei riuscire a capire se qualcuno dei suoi attributi fa riferimento ad una o più tabelle J (tali che I != J) e a sapere anche quali sono queste famose tabelle J. Ora sinceramente non so se all'interno della tabella schema ci sia qualche informazione che mi possa essere utile. Ciao e grazie :)

PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 23:28
Sabato, 09/05/2009
Ho confuso la show schema con la describe...
TI faccio un esempio concreto:
Codice sorgente - presumibilmente Php

  1. shell> mysql -u root -p
  2. mysql> create database xara;
  3. mysql> use xara;
  4. mysql>create table utenti (id int not null auto_increment primary key, nome char(30));
  5. mysql>create table utenti_amici (id int not null auto_increment primary key, id_primo int not null, id_secondo int not null, foreign key (id_primo) references utenti(id), foreign key (id_secondo) references utenti(id));


Creato il mio db posso vederne la struttura in questo modo:
Codice sorgente - presumibilmente Plain Text

  1. mysql> describe utenti_amici;


Ottengo il seguente risultato:
Codice sorgente - presumibilmente Php

  1. +------------+---------+------+-----+---------+----------------+
  2. | Field      | Type    | Null | Key | Default | Extra          |
  3. +------------+---------+------+-----+---------+----------------+
  4. | id         | int(11) | NO   | PRI | NULL    | auto_increment |
  5. | id_primo   | int(11) | NO   | MUL | NULL    |                |
  6. | id_secondo | int(11) | NO   | MUL | NULL    |                |
  7. +------------+---------+------+-----+---------+----------------+


Mentre:
Codice sorgente - presumibilmente Plain Text

  1. mysql> show tables;


Mi restituisce le tabelle presenti:
Codice sorgente - presumibilmente Plain Text

  1. +----------------+
  2. | Tables_in_xara |
  3. +----------------+
  4. | utenti         |
  5. | utenti_amici   |
  6. +----------------+



Naturalmente ti basta usare "la describe" per verificare l'esistenza di chiavi esterne

PM Quote
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 10:43
Domenica, 10/05/2009
Si ho capito, ma in questo modo (con la describe) non riesco a capire su quale altra/e tabella/e fa riferimento la tab su cui applico la describe. In pratica, nel tuo esempio, mi servirebbe un sistema per poter dire "ok, la tabella utenti_amici ha 2 chiavi esterne. La prima fa reference sulla tabella utenti e la seconda pure". Quello che dovrei fare, in poche parole, è riuscire ad ordinare le tabelle del db su cui lavoro mettendo per prime quelle che non hanno delle chiavi esterne e poi quelle che le hanno, in modo da poter fare delle modifiche che rispettino i constraints.

Ultima modifica effettuata da Furion il 10/05/2009 alle 10:46
PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 11:46
Domenica, 10/05/2009
Pensavo che magari la SHOW CREATE TABLE sarebbe servita.
Ma dopo aver provato
Codice sorgente - presumibilmente Plain Text

  1. mysql> SHOW CREATE TABLE utenti_amici;


Ho ottenuto:
Codice sorgente - presumibilmente Php

  1. | utenti_amici | CREATE TABLE `utenti_amici` (
  2.   `id` int(11) NOT NULL auto_increment,
  3.   `id_primo` int(11) NOT NULL,
  4.   `id_secondo` int(11) NOT NULL,
  5.   PRIMARY KEY  (`id`),
  6.   KEY `id_primo` (`id_primo`),
  7.   KEY `id_secondo` (`id_secondo`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |


Non mi vengono altre idee

PM Quote
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 19:32
Domenica, 10/05/2009
Grande Xaratroom! Mi hai risolto il problema XD No, no, non è una presa per il c**o. Io non sapevo che si potesse usare questo comando e l'ho provato per vedere cosa succedeva: il risultato è praticamente identico al tuo, ma se si sostituisce "\G" al punto e virgola, si ottiene una schermata con la CREATE TABLE completa, proprio come se l'avessi scritta due secondi fa a mano. GRAZIE ANCORA!!

PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 20:58
Domenica, 10/05/2009
ma anche con \g a me non funziona ...
Comunque l'importante è che hai risolto

PM Quote
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 11:21
Lunedì, 11/05/2009
Strano che non ti funzioni. Comunque grazie ancora ^_^

PM Quote