dal 2015 - visita n. 696
Il comando ALTER
Il comando ALTER

 

Il comando ALTER

Il comando ALTER è molto utile quando si desidera cambiare il nome di una tabella o quello di un qualsiasi campo della tabella o se si desidera aggiungere o eliminare una colonna esistente in una tabella.

Cominciamo con la creazione di una tabella denominata testalter_tbl.

# mysql -u root -p password;

Dopo l'immissione della password di root:

mysql> use DBPROVA;
Database changed
mysql> create table testalter_tbl
    -> (
    -> i INT,
    -> c CHAR(1)
    -> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Eliminazione, aggiunta e riposizionamento di una colonna

Per eliminare una colonna esistente dalla tabella MySQL precedente si utilizzerà la clausola DROP con il comando ALTER, come segue:

mysql> ALTER TABLE testalter_tbl  DROP i;

DROP non funziona se la colonna è l'unica rimasta nella tabella.

Per aggiungere una colonna bisogna usare ADD e specificare la definizione della colonna. Le istruzioni seguenti ripristinano la colonna i nella tabella testalter_tbl:

mysql> ALTER TABLE testalter_tbl ADD i INT;

Dopo l'emissione di questa dichiarazione, testalter_tbl conterrà le stesse due colonne che aveva al momento della sua creazione, ma non avrà proprio la stessa struttura. Questo perché le nuove colonne vengono aggiunte di default alla fine della tabella. Così benchè in origine i fosse la prima colonna adesso è l'ultima.A

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

Per indicare che si desidera una colonna in una posizione specifica all'interno della tabella, utilizzare FIRST per collocarla in prima colonna o AFTER nome_col per indicare che la nuova colonna deve essere posizionata dopo nome_col. Provare le seguenti istruzioni ALTER TABLE, utilizzando dopo SHOW COLUMNS per vederne gli effetti:

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

Le specifiche FIRST e AFTER funzionano soltanto con la clausola ADD. Questo significa che se si desidera riposizionare una colonna esistente all'interno di una tabella bisogna prima utilizzare DROP e poi ADD per inserirla nella nuova posizione.


Modifica della definizione o del nome di una colonna

per cambiare la definizione di una colonna bisogna usare la clausola MODIFY o CHANGE assieme al comando ALTER. Per esempio, per cambiare la colonna c da CHAR(1) a CHAR(10) bisogna eseguire:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

Con CHANGE la sintassi è un pochino diversa. Dopo la parola chiave CHANGE bisogna indicare la colonna da cambiare e poi la nuova definizione includendone pure il nome. Ecco un esempio:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

Se si usa CHANGE per riconvertire j da BIGINT a INT senza cambiare il nome della colonna, l'istruzione sarà:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

Gli effetti di ALTER TABLE sui valori Null e Default

Quando si esegue MODIFY o CHANGE su una colonna bisogna indicare se la colonna contiene dei valori NULL e quale sia il suo valore predefinito, altrimenti MySQL assegna automaticamente i valori per questi attributi.

Ecco un esempio dove una colonna NOT NULL avrà assegnato un valore 100 di default.

mysql> ALTER TABLE testalter_tbl 
    -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Se non si utilizza il comando precedente, MySQL riempirà con valori NULL tutte le colonne.


Cambiare il valore di default di una colonna

È possibile modificare il valore predefinito per qualsiasi colonna usando il comando ALTER, come nel seguente esempio.

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | 1000    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

È possibile rimuovere l'impostazione predefinita da qualsiasi colonna utilizzando la clausola DROP con il comando ALTER.

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Cambiare il tipo di tabella

Si realizza con la clausola TYPE assieme al comando ALTER. Nell'esempio seguente il tipo della tabella testalter_tbl viene cambiato in MYISAM.

Per vedere gli effetti ottenuti usare l'istruzione SHOW TABLE STATUS.

mysql> ALTER TABLE testalter_tbl TYPE = MYISAM;
mysql>  SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
           Name: testalter_tbl
           Type: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 25769803775
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-06-03 08:04:36
    Update_time: 2007-06-03 08:04:36
     Check_time: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Cambiare il nome della tabella

Si realizza con l'opzione RENAME nell'istruzione ALTER TABLE. Nell'esempio viene cambiato il nome della tabella testalter_tbl in alter_tbl.

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

















Introduzione
Installazione
Amministrazione
MySQL e PHP
Gestione database
Tipi di dati
Gestione tabelle
Query insert
Query select
Query update e delete
Clausola where
Clausola like e regexp
Clausola order by
Clausola join
Il valore NULL
Le transazioni
Il comando ALTER
Gli indici
Tabelle temporanee e cloni
Info sul database
Generazione di sequenze
Gestione dei duplicati
Iniezione di codice SQL
Export / Import



Ah, come poco indovinano gli uomini le condizioni dell'anima altrui, se non la illuminano, ed e' raro, coi getti d'un amore profondo.
G. Mazzini

Valid CSS!
pagina generata in 0.001 secondi