MySQLi - Comando ALTER

MySQLi ALTER Il comando è molto utile quando si desidera modificare un nome della tabella, qualsiasi campo della tabella o se si desidera aggiungere o eliminare una colonna esistente in una tabella.

Cominciamo con la creazione di una tabella chiamata tutorials_alter.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_alter
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.27 sec)

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

Rilascio, aggiunta o riposizionamento di una colonna

Supponi di voler eliminare una colonna esistente i dall'alto della tabella MySQLi quindi utilizzerai DROP clausola insieme a ALTER comando come segue -

mysql> ALTER TABLE tutorials_alter  DROP i;

UN DROP non funzionerà se la colonna è l'unica rimasta nella tabella.

Per aggiungere una colonna, utilizzare AGGIUNGI e specificare la definizione della colonna. La seguente istruzione ripristina il filei colonna a tutorials_alter -

mysql> ALTER TABLE tutorials_alter ADD i INT;

Dopo aver emesso questa dichiarazione, testalter conterrà le stesse due colonne che aveva quando hai creato la tabella per la prima volta, ma non avrà la stessa struttura. Questo perché le nuove colonne vengono aggiunte alla fine della tabella per impostazione predefinita. Quindi anche sei originariamente era la prima colonna in mytbl, ora è l'ultima.

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| 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 renderla la prima colonna o AFTER col_name per indicare che la nuova colonna deve essere posizionata dopo col_name. Prova le seguenti istruzioni ALTER TABLE, usando SHOW COLUMNS dopo ciascuna per vedere quale effetto ha ciascuna:

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;

Gli specificatori FIRST e AFTER funzionano solo con la clausola ADD. Ciò significa che se vuoi riposizionare una colonna esistente all'interno di una tabella, devi prima DROP e poi AGGIUNGERLA nella nuova posizione.

Modifica della definizione o del nome di una colonna

Per modificare la definizione di una colonna, utilizzare MODIFY o CHANGEclausola insieme al comando ALTER. Ad esempio, per cambiare colonnac da CHAR (1) a CHAR (10), fai questo -

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

Con CHANGE, la sintassi è leggermente diversa. Dopo la parola chiave CHANGE, assegna un nome alla colonna che desideri modificare, quindi specifica la nuova definizione, che include il nuovo nome. Prova il seguente esempio:

mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;

Se ora usi CHANGE per convertire j da BIGINT a INT senza cambiare il nome della colonna, l'istruzione sarà come previsto -

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

L'effetto di ALTER TABLE sugli attributi dei valori nulli e predefiniti -

Quando MODIFICATE o CAMBIATE una colonna, potete anche specificare se la colonna può contenere valori NULL e qual è il suo valore predefinito. Infatti, se non lo fai, MySQLi assegna automaticamente i valori per questi attributi.

Ecco l'esempio, dove la colonna NOT NULL avrà valore 100 per impostazione predefinita.

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

Se non usi il comando sopra, MySQLi riempirà i valori NULL in tutte le colonne.

Modifica del valore predefinito di una colonna

È possibile modificare un valore predefinito per qualsiasi colonna utilizzando il comando ALTER. Prova il seguente esempio.

mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | 1000    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

È possibile rimuovere il vincolo predefinito da qualsiasi colonna utilizzando la clausola DROP insieme al comando ALTER.

mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Modifica di un tipo di tabella

È possibile utilizzare un tipo di tabella utilizzando TYPE clausola insieme al comando ALTER.

Per scoprire il tipo corrente di una tabella, utilizzare l'istruzione SHOW TABLE STATUS.

mysql>  SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
           Name: tutorials_alter
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-02-17 11:30:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Rinominare una tabella

Per rinominare una tabella, usa il RENAMEopzione dell'istruzione ALTER TABLE. Prova il seguente esempio per rinominare tutorials_alter in tutorials_bks.

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

È possibile utilizzare il comando ALTER per creare e rilasciare INDEX su un file MySQL. Vedremo questa caratteristica nel prossimo capitolo.