Oppure

Loading
16/04/09 13:40
Furion
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!
aaa
09/05/09 20:28
Xaratroom
Ti riferisci forse alla SHOW (SCHEMA) ?
aaa
09/05/09 21:04
Furion
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 :)
aaa
09/05/09 21:28
Xaratroom
Ho confuso la show schema con la describe...
TI faccio un esempio concreto:
shell> mysql -u root -p
mysql> create database xara;
mysql> use xara;
mysql>create table utenti (id int not null auto_increment primary key, nome char(30));
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:
mysql> describe utenti_amici;

Ottengo il seguente risultato:
+------------+---------+------+-----+---------+----------------+
| Field      | Type    | Null | Key | Default | Extra          |
+------------+---------+------+-----+---------+----------------+
| id         | int(11) | NO   | PRI | NULL    | auto_increment | 
| id_primo   | int(11) | NO   | MUL | NULL    |                | 
| id_secondo | int(11) | NO   | MUL | NULL    |                | 
+------------+---------+------+-----+---------+----------------+

Mentre:
mysql> show tables;

Mi restituisce le tabelle presenti:
+----------------+
| Tables_in_xara |
+----------------+
| utenti         | 
| utenti_amici   | 
+----------------+


Naturalmente ti basta usare "la describe" per verificare l'esistenza di chiavi esterne
aaa
10/05/09 8:43
Furion
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 10/05/09 8:46
aaa
10/05/09 9:46
Xaratroom
Pensavo che magari la SHOW CREATE TABLE sarebbe servita.
Ma dopo aver provato
mysql> SHOW CREATE TABLE utenti_amici;

Ho ottenuto:
| utenti_amici | CREATE TABLE `utenti_amici` (
  `id` int(11) NOT NULL auto_increment,
  `id_primo` int(11) NOT NULL,
  `id_secondo` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `id_primo` (`id_primo`),
  KEY `id_secondo` (`id_secondo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | 

Non mi vengono altre idee
aaa
10/05/09 17:32
Furion
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!!
aaa
10/05/09 18:58
Xaratroom
ma anche con \g a me non funziona ...
Comunque l'importante è che hai risolto
aaa