Manutenzione Tabelle

Gli argomenti di questa pagina

  • Prima di iniziare
  • Manutenzione delle tabelle
  • Rinominare una tabella: RENAME TABLE e ALTER TABLE
  • Spostare una tabella da un DB ad un altro: RENAME TABLE
  • Copiare una tabella da un DB ad un altro: CREATE TABLE e INSERT INTO
  • Eliminazione delle tabelle: DROP TABLE
  • Aggiungere una colonna: ALTER TABLE ADD
  • Manipolare la proprietà di un campo: ALTER TABLE CHANGE
  • Modificare il tipo di dato di una colonna: ALTER TABLE MODIFY
  • Eliminare uno o più campi: ALTER TABLE DROP
  • Eliminare un record: DELETE
  • Svuotare una tabella (eliminare tutti i record): TRUNCATE

Prima di iniziare

Prima di iniziare e per risparmiare spazio nella pagina è bene mostrare il codice che sarà necessario a svolgere tutte le attività e ad eseguire le query che verranno eseguite.

Innanzitutto verificare che esista il file che contiene i dati di connessione al DB.
In questo file verranno indicate le sole quattro variabili necessarie a stabilire la connessione al DB prima di compiere qualsiasi azione ed è questo file che includeremo in tutte le pagine che debbono lavorare col DB. Questi dati vengono forniti dall'host che abbiamo scelto per il nostro sito.

Il file db_login.php
1
2
3
4
5
6
<?php
$Host 
"hostname";
$User "username";
$Password "password";
$DBName "DBName";
?>

Questo che segue è un frammento di codice che sarà necesario per eseguire la connessione al DB ed alla esecuzione delle Query.

Questo frammento di codice va inserito nella pagina che deve eseguire operazioni col DB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n";
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n";
    } else {
        
mysql_set_charset("utf8"); 
        
//    esecuzione della Query
        
$result mysql_query($Query);
        if (!
$result) {
            echo 
mysql_error() . "<br />\n";
        } else {
            echo 
"Query eseguita<br />\n";
            
//    qui vengono eseguiti altri eventuali lavori
        
}
    }
}
@
mysql_close ($Link);
?>

Se si apre una connessione a MySQL all'interno del file PHP è possibile chiuderla con la funzione mysql_close(). Anche se non tutti i programmatori usano chiudere esplicitamente la connessione perchè lo trovano inutile, in quanto le connessioni MySQL sono solitamente chiuse per default alla fine dello script, è buona norma fare in modo che tutte le risorse vengano liberate dopo l'utilizzo del DB, usando la funzione mysql_close(). Ciò assicurerà che la connessione venga chiusa nella linea esatta nello script in cui si dice di chiudere.

Chiusura della connessione al DB
1
2
3
<?php
mysql_close 
($link);
?> 

Manutenzione delle tabelle

Queste che seguono sono alcune tra le operazioni che possiamo compiere per la manutenzione delle tabelle.

  • Rinominare una tabella: RENAME TABLE
  • Spostare e rinominare una tabella da un DB ad un altro: RENAME TABLE
  • Copiare e rinominare una tabella da un DB ad un altro: CREATE TABLE e INSERT INTO
  • Eliminazione delle tabelle: DROP TABLE
  • Aggiungere una colonna: ALTER TABLE ADD
  • Rinominare o modificare la proprietà di un campo: ALTER TABLE CHANGE
  • Modificare il tipo di dato di una colonna: MODIFY
  • Eliminare uno o più campi: ALTER TABLE DROP
  • Eliminare un record: DELETE
  • Svuotare una tabella (eliminare tutti i record): TRUNCATE

Rinominare una tabella: RENAME TABLE e ALTER TABLE

Per rinominare una tabella MySQL esistente, con o senza i dati in essa, non è un problema. Per cambiare il nome della tabella viene usata l'istruzione RENAME.

1
2
3
<?php
$Query 
"RENAME TABLE test_1 TO test_2 ;";
?>

Alle volte è possibile utilizzare questa seconda istruzione usando ALTER TABLE e RENAME.

1
2
3
<?php
$Query 
"ALTER TABLE test_1 RENAME test_2;";
?>

Spostare una tabella da un DB ad un altro: RENAME TABLE

Quando si dispone di più DB sullo stesso server (in locale senz'altro) è possibile spostare una tabella da un DB ad un altro. La Query da usare è semplice ed è mostrata qui di seguito. Basta qualificare il nome della tabella di origine e quella di destinazione coi nomi dei rispettivi DB collegandoli tramite un punto ( . )

ATTENZIONE: Questa operazione elimina la tabella dal DB di provenienza e la copia nel DB di destinazione.
1
2
3
<?php
$Query 
"RENAME TABLE current_db.diario TO dest_db.diario;";
?>

Copiare una tabella da un DB ad un altro: CREATE TABLE e INSERT INTO

Ma se non si vuole eliminare la tabella dal DB di provenienza bensì lo si vuole semplicemente duplicare è possibile usare due metodi che verranno di seguito illustrati.

Primo metodo: usare le istruzioni CREATE TABLE, INSERT INTO e RENAME TABLE

Se non si vuole eliminare la tabella dal DB di provenienza si debbono eseguire alcuni passi in più:

  • duplicare la tabella
  • trasferirvi i dati dalla tabella di origine
  • eseguire il trasferimento

Dopo aver stabilito la connessione al DB possiamo eseguire le tre Query necessarie all'operazione:
La prima Query crea, nello stesso DB, un duplicato della tabella che si vuole trasferire copiandone la sola struttura.
La seconda Queri copia i dati dalla tabella originale alla nuova.
La terza Query sposta nel DB di destinazione la copia della nuova tabella togliendola dal DB di appartenenza.
Per eseguire queste tre Query avremo bisogno del file db_login.php e del piccolo script presentati ad inizio pagina. Per questo esempio, per risparmiare codice, possiamo organizzarci come è mostrato in questo piccolo script.
Una volta stablita la connessione vengono eseguite le tre Query prima della chiusura della connessione stessa.
La prima Query duplica la tabella nello stesso DB di provenienza
La seconda Query la popola coi dati
La terza la sposta nel DB di destinazione eliminandola dal DB di provenienza

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
include ('res/db_login.php');
include (
'res/res.php');
if (@
$Link db_connect()) {    
    
$Query "CREATE TABLE diario_2 LIKE diario;";
    
$result mysql_query($Query);
    
$Query "INSERT INTO diario_2 (SELECT * from diario)";
    
$result mysql_query($Query);
    
$Query "RENAME TABLE current_db.diario_2 TO dest_db.diario;";
    
$result mysql_query($Query);
} else {
    echo 
"Si sono verivicati problemi col DB<br />\n";
}
@
mysql_close ($Link); 
?>

Secondo metodo: usare l'istruzione CREATE TABLE e INSERT INTO

Questa potrebbe essere un'alternativa più semplice e meno laboriosa. Creare e popolare la nuova tabella in altro DB con queste due Query:
La prima copia la struttura della tabella
La seconda vi copia i dati
Per l'esecuzione di queste due Query è possibile adattare lo script presentato qui sopra.

1
2
3
4
<?php
$Query_create 
"CREATE TABLE dest_db.test_3 LIKE original_db.test";
$Query_insert "INSERT INTO dest_db.test_3 SELECT * FROM original_db.test";
?>

Eliminazione delle tabelle: DROP TABLE

Per eliminare una tabella è sufficiente usare questa Query. Eliminando la tabella si perdono tutti i dati.

1
2
3
<?php
$Query 
"DROP TABLE sql_rubrica_nuova";
?>

Aggiungere una colonna: ALTER TABLE ADD

Dopo aver creato una tabella è possibile aggiungere dei campi se ci accorgiamo di averne dimenticati alcuni.
Qui sotto sono mostrate due Query: una per aggiungere un campo, l'altra per aggiungerne due.
La sequenza delle clausole sono:
ALTER TABLE, indicando il nome della tabella
ADD, indicando il nome del campo
il tipo di campo, un elenco completo è visibile in Gestione DB => La struttura del DB
AFTER, per indicare la posizione dove inserire il nuovo campo.

1
2
3
4
5
6
7
8
9
<?php
//    aggiungere un campo
$Query "ALTER TABLE sql_rubrica_nuova 
ADD campo_prova VARCHAR( 50 ) NOT NULL AFTER prov ;"
;
//    aggiunta di più campi
$Query_2 "ALTER TABLE sql_rubrica_nuova 
ADD campo_prova_1 VARCHAR( 10 ) NOT NULL AFTER prov ,
ADD campo_prova_2 DATETIME NOT NULL AFTER campo_prova_1 ;"
;
?>

Manipolare la proprietà di un campo: ALTER TABLE CHANGE

La Query qui sotto serve per modificare una proprietà di un campo. Queste che seguono sono le clausole da usare nella Query:
ALTER TABLE, indicando il nome della tabella
CHANGE, indicando due volte il nome del campo: questo serve in caso di rinomina del campo: vecchio_nome nuovo_nome
indicare il tipo di campo desiderato.

1
2
3
<?php
$Query 
"ALTER TABLE sql_rubrica_nuova CHANGE campo_prova_2 campo_prova_2 VARCHAR( 20 ) NOT NULL ";
?>

Modificare il tipo di dato di una colonna: ALTER TABLE MODIFY

Per modificare il tipo di dato di una colonna ma senza rinominare la colonna con ALTER TABLE si può usare l'istruzione MODIFY

1
2
3
<?php
$Query 
"ALTER TABLE sql_rubrica_nuova MODIFY campo_prova_2 VARCHAR( 150 ) NOT NULL ";
?>

Eliminare uno o più campi: ALTER TABLE DROP

Le query qui sotto vengono usate per eliminare uno o più campi.
Ecco i comandi da usare:
ALTER TABLE, indicando il nome della tabella
DROP seguito dal nome del campo da eliminare

1
2
3
4
5
6
7
8
<?php
//    eliminare un campo
$Query "ALTER TABLE sql_rubrica_nuova DROP campo_prova_3";
//    eliminare più campi
$Query_1 "ALTER TABLE sql_rubrica_nuova
  DROP campo_prova_1,
  DROP campo_prova_2;"
;
?>

Eliminare un record: DELETE

Per eliminare uno o più record, nella Query è necessario indicare la clausola WHERE perchè, in caso contrario, verranno eliminati tutti i record.
La clausola LIMIT può essere usata per limitare i danni in caso di errori compiuti nella clausola WHERE. In questo caso essendo indicato un ID nella clausola WHERE verrà comunque eliminato un solo record se viene trovato l'ID indicato.
Se si desidera veramente cancellare più di un record è possibile non usare affatto la clausola WHERE nè la clausola LIMIT.
Tuttavia è sconsigliato di eliminare tutti i record di una tabella usando questo metodo perchè questa operzione comporta che il primo record che si inserisce dopo lo svuotamento fatto in questa maniera assumerà un ID successivo all'ultimo ID presente prima dello svuotamento.

1
2
3
4
<?php
$Query 
"DELETE FROM test_sql_citta 
        WHERE test_sql_citta.id = 1 LIMIT 1"
;
?>

Svuotare una tabella (eliminare tutti i record): TRUNCATE

Se per svuotare una tabella è possibile usare la query appena vista, ovviamente senza le clausole WHERE e LIMIT, è preferibile usare questa che segue.
Con la prima Query la tabella viene svuotata, ma gli indici incrementali non vengono resettati; questo comporta che il primo record che viene inserito assume, come indice, il successivo all'ultimo indice che la tabella aveva prima della cancellazione (se l'ultimo indice era 100, il nuovo indice per il primo record inserito dopo la cancellazione, sarà 101).
Usando invece questa ultima Query, dopo lo svuotamento della tabella, gli indici autoincrementali vengono resettati per cui il successivo inserimento di un nuovo record ricomincia da 1.

1
2
3
<?php
$Query 
"TRUNCATE TABLE sql_rubrica_nuova";
?>

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum