Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-05-2009, 16:30   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
[MySql] Come modificare una tabella per aggiungergli un references ad un'altra?

Ciao,
ho due tabelle fatte nel seguente modo:

Codice:
mysql> describe citta;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| ID    | int(11)     | NO   | PRI | NULL    | auto_increment |
| Citta | varchar(35) | YES  |     | NULL    |                |
| Cap   | int(11)     | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)

mysql> describe utente;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| User_Id      | varchar(20) | NO   | PRI | NULL    |       |
| Nome         | varchar(20) | NO   |     | NULL    |       |
| Cognome      | varchar(20) | NO   |     | NULL    |       |
| Data_Nascita | date        | NO   |     | NULL    |       |
| Indirizzo    | varchar(50) | NO   |     | NULL    |       |
| Cap          | int(11)     | NO   |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
Praticamente devo fare in modo che il campo Cap dela tabella utente prenda il campo Cap della tabella citta come foreign key....devo modificare tale tabella con alter table, ho provato a fare così ma non mi funziona:

ALTER TABLE utente ADD CONSTRAINT CapDeveEsistere FOREIGN KEY (Cap) REFERENCES citta (Cap);

come mai? Cosa sbaglio?

Tnx
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 20-05-2009, 17:31   #2
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
Altra domanda:
Domanda 2, se ho una tabella come questa:
Codice:
mysql> describe comuni;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| comune           | varchar(255) | YES  |     | NULL    |       |
| provincia        | varchar(255) | YES  |     | NULL    |       |
| cap              | varchar(255) | YES  |     | NULL    |       |
| prefisso_tel     | varchar(255) | YES  |     | NULL    |       |
| codice_istat     | varchar(255) | YES  |     | NULL    |       |
| codice_catastale | varchar(255) | YES  |     | NULL    |       |
| sito_comune      | varchar(255) | YES  |     | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
e la tabella è gia popolata di dati c'è modo di cambiargli il tipo del campo cap da varchar ad int e convertire tutti i dati contenuti nella colonna cap da varchar ad int?
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2009, 09:27   #3
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da D4rkAng3l Guarda i messaggi
Ciao,
ho due tabelle fatte nel seguente modo:
...
come mai? Cosa sbaglio?

Tnx
Andrea
Prova ad aggiungere il constraint di foreign key direttamente nello statement di creazione della tabella


, CONSTRAINT `nomeconstraint' FOREIGN KEY (cap)
REFERENCES citta(cap)

Occhio alla virgola inziale

Inoltre sappi che MySql puo' montare diversi Engine, alcuni dei quali NON supportano le foreign key, anche largamente usati per soluzioni commerciali.
E questo secondo me la dice lunga sulla serieta' di MySql.

Spera di non avere montato uno di questi engine sfortunati.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2009, 09:40   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da D4rkAng3l Guarda i messaggi
Altra domanda:
Non conosco bene MySql, ma su quasi tutti i motori lo statement e'

ALTER TABLE citta MODIFY COLUMN cap INT(11)

Ancora una cosa, ovviamente per poter indicare una foreign key i campi delle 2 tabelle devono essere dello stesso tipo
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2009, 13:40   #5
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Prova ad aggiungere il constraint di foreign key direttamente nello statement di creazione della tabella


, CONSTRAINT `nomeconstraint' FOREIGN KEY (cap)
REFERENCES citta(cap)

Occhio alla virgola inziale

Inoltre sappi che MySql puo' montare diversi Engine, alcuni dei quali NON supportano le foreign key, anche largamente usati per soluzioni commerciali.
E questo secondo me la dice lunga sulla serieta' di MySql.

Spera di non avere montato uno di questi engine sfortunati.
mmm perchè la virgola iniziale? cmq avevo provato una formulazione del genere ma non mi funzionava...vabbè alla fine ho optato per mantenere il campo Cap a varchar (e ricreare la tabella utente con tale tipo nel relativo campo cap) perchè riflettendo ho pensato che i cap in genere sono del tipo: "00100" e se lo tenesi come int non potrei mettere i 2 valori 0 iniziali...quindi sta bene così.

Altra domanda da un milione di dollari...praticamente una parte di questo esame funziona così:

Prendo il vecchio progetto fatto al primo esame di Database, lo popolo di dati (tanti dati) e vedo quanto ci mette a fare le varie query.
Poi si ottimizzano le query usando le view ed inserendo degli indici....si rieseguono le stesse query e si mostra il risultato dell'ottimizzazione mostrando che le query ottimizzate ed il database con degli indici ci mettono meno tempo rispetto a prima.

Piccolo dettaglio...per ora ho popolato solo la tabella comuni, province, regioni (con tutti i dati relativi ad esempio ai comuni italiani: nome comune, cap del comune, numero abitanti, etcetc...ovviamente queste tabelle le ho trovate prefatte su Internet...sarebbe stato impossibile inserire dati coerenti a mano in poco tempo).

Poi ho usato un programma chiamato Data Generator for MySql ed ho riempito la tabella utenti (per ora solo questa) con circa 6000 utenti (il programma è fatto molto bene ed è fatto per rispettare i vincoli di integrità referenziale popolando la tabella utente e mettendo nel relativo campo Cap un valore pescato dal campo Cap della tabella Comuni).

Vabbè tutto sto discorso per dire: ho popolato con parecchi record la tabella utenti....anche le tabelle comuni, province non sono piccolissime in quanto contengono tutti i comuni e le province italiane...bene se provo a fare delle query (non complesse ma comunque con 2-3 join) ci mette sempre pochissimo ad eseguirle (tipo al più 0,3 secondi).

Ora...vabbè che devo popolare anche tutto il resto del db ma mi sembra troppo basso come tempo e sopratutto così non saprei come far vedere la differenza tra query prima e dopo l'ottimizzazione del db e delle query stesse

Può essere che è attivata una cache delle query e che ci mette così poco per questo motivo? In MySql eventualmente è possibile disattivare tale cache?

Cmq ovviamente ho usato InnoDB che m garantisce le foreign key e mi dovrebbe anche gestire in automatico le transazioni...MyIsam sarà più prestazionale ma per tale progetto sarebbe solo scomodo...

Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Arianespace potrebbe lanciare il primo r...
Google Pixel 10a disponibile al prezzo m...
Microsoft Copilot nei guai: email riserv...
AOC a 399€ su Amazon: QD-OLED 240 Hz e 0...
La Cina ha recuperato dal mare il primo ...
Boeing CST-100 Starliner: la NASA rende ...
hiop e TaDa uniscono le forze per trasfo...
Thermal Grizzly mostra il Ryzen 7 9850X3...
AMD Ryzen 'Olympic Ridge' Zen 6 per desk...
Donald Trump renderà pubbliche in...
Prezzo mai visto da mesi: ECOVACS DEEBOT...
Non solo S26, Samsung sta per lanciare a...
Windows 11 avrà a breve uno Speed...
Ask Intel: l'assistente IA che ti aiuta ...
Nasce Freedom.gov: il portale USA per ag...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v