MySQLi - Comando ALTER

MySQLi ALTER El comando es muy útil cuando desea cambiar el nombre de su tabla, cualquier campo de la tabla o si desea agregar o eliminar una columna existente en una tabla.

Comencemos con la creación de una tabla llamada tutorials_alter.

[email protected]# 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)

Soltar, agregar o reposicionar una columna

Suponga que desea eliminar una columna existente i desde la tabla MySQLi anterior, entonces usará DROP cláusula junto con ALTER comando de la siguiente manera:

mysql> ALTER TABLE tutorials_alter  DROP i;

UN DROP no funcionará si la columna es la única que queda en la tabla.

Para agregar una columna, use ADD y especifique la definición de la columna. La siguiente declaración restaura lai columna a tutorials_alter -

mysql> ALTER TABLE tutorials_alter ADD i INT;

Después de emitir esta declaración, testalter contendrá las mismas dos columnas que tenía cuando creó la tabla por primera vez, pero no tendrá la misma estructura. Eso es porque las nuevas columnas se agregan al final de la tabla de forma predeterminada. Así que aunquei originalmente era la primera columna en mytbl, ahora es la última.

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)

Para indicar que desea una columna en una posición específica dentro de la tabla, use FIRST para convertirla en la primera columna o DESPUÉS de col_name para indicar que la nueva columna debe colocarse después de col_name. Pruebe las siguientes declaraciones ALTER TABLE, usando SHOW COLUMNS después de cada una para ver qué efecto tiene cada una:

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;

Los especificadores FIRST y AFTER solo funcionan con la cláusula ADD. Esto significa que si desea reposicionar una columna existente dentro de una tabla, primero debe DEJARLA y luego AGREGARla en la nueva posición.

Cambiar la definición o el nombre de una columna

Para cambiar la definición de una columna, use MODIFY o CHANGEcláusula junto con el comando ALTER. Por ejemplo, para cambiar de columnac de CHAR (1) a CHAR (10), haga esto:

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

Con CHANGE, la sintaxis es un poco diferente. Después de la palabra clave CHANGE, nombre la columna que desea cambiar y luego especifique la nueva definición, que incluye el nuevo nombre. Pruebe el siguiente ejemplo:

mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;

Si ahora usa CHANGE para convertir j de BIGINT de nuevo a INT sin cambiar el nombre de la columna, la declaración será la esperada:

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

El efecto de ALTER TABLE sobre los atributos de valor nulo y predeterminado -

Cuando MODIFICA o CAMBIA una columna, también puede especificar si la columna puede contener valores NULL y cuál es su valor predeterminado. De hecho, si no hace esto, MySQLi asigna automáticamente valores para estos atributos.

Aquí está el ejemplo, donde la columna NOT NULL tendrá el valor 100 por defecto.

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

Si no utiliza el comando anterior, MySQLi completará los valores NULL en todas las columnas.

Cambiar el valor predeterminado de una columna

Puede cambiar un valor predeterminado para cualquier columna usando el comando ALTER. Pruebe el siguiente ejemplo.

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)

Puede eliminar la restricción predeterminada de cualquier columna utilizando la cláusula DROP junto con el 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)

Cambiar un tipo de tabla

Puede usar un tipo de tabla usando TYPE cláusula junto con el comando ALTER.

Para averiguar el tipo actual de una tabla, use la instrucción 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)

Cambiar el nombre de una tabla

Para cambiar el nombre de una tabla, use el RENAMEopción de la instrucción ALTER TABLE. Pruebe el siguiente ejemplo para cambiar el nombre de tutorials_alter a tutorials_bks.

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

Puede usar el comando ALTER para crear y colocar INDEX en un archivo MySQL. Veremos esta característica en el próximo capítulo.