Operaciones fundamentales con tablas en MySQL

Para explorar las distintas funciones de manipulación de tablas en MySQL, primero se configura un entorno de pruebas.

mysql> CREATE DATABASE base_pruebas;
Query OK, 1 row affected (0.00 sec)

mysql> USE base_pruebas;
Database changed

mysql> CREATE TABLE tabla_personal (identificador INT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, nombre_completo VARCHAR(50), anios_experiencia TINYINT UNSIGNED);
Query OK, 0 rows affected (0.05 sec)

Inspeccionar la estructura de una tabla

MySQL ofrece múltiples formas para obtener la definición de una tabla. Si la tabla pertenece a otra base de datos, se debe prfeijar con el nombre de la misma (base_datos.nombre_tabla). El comando DESCRIBE es el más común.

mysql> DESCRIBE tabla_personal;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| nombre_completo     | varchar(50)         | YES  |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> SHOW COLUMNS FROM tabla_personal;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| nombre_completo     | varchar(50)         | YES  |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Cambiar el nombre de una tabla

Se utiliza la santencia ALTER TABLE ... RENAME. La referencia completa (base_datos.tabla) es necesaria si no se está trabajando en la base de datos activa.

mysql> ALTER TABLE tabla_personal RENAME empleados;
Query OK, 0 rows affected (0.04 sec)

mysql> SHOW TABLES;
+------------------------+
| Tables_in_base_pruebas |
+------------------------+
| empleados              |
+------------------------+
1 row in set (0.00 sec)

Modificar únicamente el tipo de dato de una columna

El comando ALTER TABLE ... MODIFY permite cambiar la definición de un campo. Se debe actuar con cautela si la tabla ya contiene registros, ya que podría causar pérdida de datos o errrores.

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| nombre_completo     | varchar(50)         | YES  |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE empleados MODIFY nombre_completo CHAR(55) NOT NULL;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| nombre_completo     | char(55)            | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Renombrar y alterar el tipo de una columna simultáneamente

ALTER TABLE ... CHANGE permite ambas operaciones en una sola sentencia. Para renombrar sin alterar el tipo, se debe repetir la definición original del tipo de dato.

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| nombre_completo     | char(55)            | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE empleados CHANGE nombre_completo apellidos_nombre VARCHAR(100) NOT NULL;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| apellidos_nombre    | varchar(100)        | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Agregar una nueva columna

La sintaxis es ALTER TABLE ... ADD. La nueva columna se añadirá por defecto al final de la lista de campos.

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| apellidos_nombre    | varchar(100)        | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> ALTER TABLE empleados ADD departamento VARCHAR(30);
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| apellidos_nombre    | varchar(100)        | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
| departamento        | varchar(30)         | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

Insertar una columna en una posición específica

Para colocar un campo al inicio, se usa la cláusula FIRST. Para situarlo después de otro campo existente, se utiliza AFTER.

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| apellidos_nombre    | varchar(100)        | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
| departamento        | varchar(30)         | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE empleados ADD genero ENUM('H','M') FIRST;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE empleados ADD salario_base DECIMAL(10,2) AFTER identificador;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| genero              | enum('H','M')       | YES  |     | NULL    |                |
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| salario_base        | decimal(10,2)       | YES  |     | NULL    |                |
| apellidos_nombre    | varchar(100)        | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
| departamento        | varchar(30)         | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

Eliminar una columna de la tabla

La operación se ejecuta con ALTER TABLE ... DROP COLUMN o simplemente DROP. Esta acción es irreversible.

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| genero              | enum('H','M')       | YES  |     | NULL    |                |
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| salario_base        | decimal(10,2)       | YES  |     | NULL    |                |
| apellidos_nombre    | varchar(100)        | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
| departamento        | varchar(30)         | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

mysql> ALTER TABLE empleados DROP COLUMN genero;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE empleados;
+---------------------+---------------------+------+-----+---------+----------------+
| Field               | Type                | Null | Key | Default | Extra          |
+---------------------+---------------------+------+-----+---------+----------------+
| identificador       | int(8)              | NO   | PRI | NULL    | auto_increment |
| salario_base        | decimal(10,2)       | YES  |     | NULL    |                |
| apellidos_nombre    | varchar(100)        | NO   |     | NULL    |                |
| anios_experiencia   | tinyint(3) unsigned | YES  |     | NULL    |                |
| departamento        | varchar(30)         | YES  |     | NULL    |                |
+---------------------+---------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

Etiquetas: MySQL SQL ALTER TABLE bases de datos gestión de esquemas

Publicado el 5-29 11:05