Bienvenidos sean a este post, hoy veremos como modificar tablas.
Tal como vimos cuando hablamos de las bases, las tablas tambien pueden modificarse pero una forma un poco mas compleja porque tenemos mas informacion para cambiar asi como tambien se pueden agregar o eliminar columnas, inclusive agregarlas en un cierto orden, pasemos a ver su sintaxis:
ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] nombreTabla
[WAIT n | NOWAIT]
especificaciones_de_alteracion [, mas especificaciones...];
Nota: Los modificadores en corchetes son opcionales
Hablemos primero de la opcion ONLINE la cual usamos para establecer a LOCK=NONE y por lo tanto podemos asegurarnos que todos los comandos del lenguaje se ejecutaran correctamente, el caso de IGNORE es para cuando tenemos problemas con claves identificadas como UNIQUE y si agregamos otra que entre en conflicto por medio de esta opcion no generara el error pero si un aviso (warning), el condicional IF EXISTS es para verificar que la tabla exista, el caso de WAIT n nos sirve para agregarle un tiempo de espera para el bloqueo de la tabla y en caso de superarlo suspender al comando, en cambio NOWAIT falla directamente sin esperar en caso de estar bloqueado, pasemos a hablar sobre los elementos que disponemos para las especificaciones de alteracion:
Opciones de tabla, estas las mencionamos en este post al momento de crear las tablas.
ADD [COLUMN] [IF NOT EXISTS] nombreColumna parametros_columna [FIRST | AFTER columna]
Nos permite agregar una nueva columna, tenemos el condicional donde verifica que no exista para crearla, luego pasamos el nombre de la columna y sus respectivos parametros como si la crearan, les recomiendo este post donde lo vimos, por ultima la opcion FIRST lo ubica en la primera posicion de la tabla y el AFTER seguido del nombre de la columna ubica a nuestra nueva columna despues de esta sino especificamos nada la agrega al final de la tabla.
ADD [COLUMN] [IF NOT EXISTS] (nombreColumna parametros_columna, ...)
Es similar a la anterior pero esta vez podemos agregar todas las columnas que sean necesarias con sus respectivos parametros pero no podemos ubicarlas donde queramos sino que se iran agregando al final de la misma.
ADD {INDEX | KEY} [IF NOT EXISTS] [nombreIndice] [tipoIndice] (nombreColumnaIndice, ...) [opciones_indice]
Este nos servira para agregar una clave o indice, el condicional es para que lo haga cuando no existe, lo siguiente es poder especificarle un nombre especifico y un tipo tambien pero estos son opcionales y deben especificarlos en caso de necesidad pero lo recomendable es que lo haga el sistema, despues entre parentesis podemos pasar todas las columnas que seran claves, por ultimo tenemos las opciones de indice.
ADD [CONSTRAINT [simbolo]] PRIMARY KEY [tipo_indice] (nombreColIndice, ...) [opciones_indice]
Modifica la tabla agregando un simbolo de restriccion para nuestra PRIMARY KEY o clave primaria, podemos pasar como opcional el tipo de indice, despues los nombres de las columnas con indices y por ultimo las opciones de indice
ADD [CONSTRAINT [simbolo]] UNIQUE [INDEX | KEY] [nombreIndice] [tipo_indice] (nombreColInidice, ...) [opciones_indice]
Hace exactamente lo mismo pero para las claves que sean unicas, en este caso de forma opcional podemos agregar un nombre de indice y el resto es como el anterior
ADD PERIOD FOR SYSTEM_TIME (nombreColInicial, nombreColFinal)
Agrega el periodo para el tiempo de sistema en nuestra y la informacion sera tomada entre las columnas informadas
ALTER [COLUMN] nombreColumna SET DEFAULT literal | (expresion)
Esta nos permite establecer un valor predeterminado en la columna informada, este valor puede ser literal o una expresion
ALTER [COLUMN] nombreColumna DROP DEFAULT
Esta nos permite eliminar el valor predeterminado de la columna informada
ALTER {INDEX | KEY} nombre_indice [NOT] INVISIBLE
Esta nos permite establecer una clave informada como invisible o no
CHANGE [COLUMN] [IF EXISTS] nombreViejoCol nombreNuevoCol parametros_columna [FIRST | AFTER nombre]
Con esta opcion podemos cambiar una columna, tenemos el condicional para verificar si existe deonde primero pasaremos primero el nombre de la columna actual, luego el nuevo y sus nuevos parametros por ultimo podemos establecer si sera el primer campo o detras de cual ira, sino se informa se ubica al final de la tabla
MODIFY [COLUMN] [IF EXISTS] nombreColumna parametros [FIRST | AFTER nombre]
Esta es exactamente igual solo que se utiliza para modificar los parametros de la columna informada y su ubicacion en caso de ser necesario
DROP [COLUMN] [IF EXISTS] nombreColumna [RESTRICT | CASCADE]
En este caso eliminara la columna informada, el condicional es utilizado para evitar el error en caso de que la misma no exista tal como lo vinimos viendo hasta ahora y las ultimas dos opciones estan para un tema de compatibilidad con migraciones a otras bases de datos
DROP PRIMARY KEY
Elimina la clave primaria de una tabla
DROP {INDEX | KEY} [IF EXISTS] nombre_indice
Esta nos elimina la clave informada de una tabla, tambien poseemos el condicional para verificar su existencia
DISABLE KEYS
Esta opcion es utilizada para desactivar todas las claves en una tabla, puede ayudar a mejorar el ingreso de informacion a la tabla
ENABLE KEYS
Vuelve a activar todas las claves que fueron desactivadas con la opcion anterior
RENAME [TO] nuevo_nombre_tabla
Esto permite renombrar la tabla actual al nuevo informado
ORDER BY nombre_columna [,nombre_columna...]
Esta nos permite establecer cuales seran las columnas por las cuales se ordenara a la tabla cuando deba devolver la informacion en ella
RENAME COLUMN nombre_viejo_columna TO nombre_nuevo_columna
Con esta podremos cambiar el nombre de una colmuna a otro sin tener que pensar en los parametros de la misma
RENAME {INDEX | KEY} nombre_viejo_clave TO nombre_nuevo_clave
Esta es igual al anterior pero sera para la claves de una columna
CONVERT TO CHARACTER SET nombre_charset [COLLATE nombre_collation]
Por ultimo tenemos esta que nos permite establecer otro juego de caracteres (charset) simplmente pasando el nombre y si queremos podemos definir otra distribucion de los caracteres (collation), para las opciones de indice les recomiendo visitar este pagina donde comentan sobre los mismos (esta en ingles), con todo esto comentado ya tienen una base de las opciones que considero mas importantes para trabajar con las tablas, existen mucho mas pero si necesitan ver cuales son les recomiendo visitar esta pagina:
https://mariadb.com/kb/en/alter-table/
Es la pagina oficial donde hablan sobre esto pero esta en ingles, pasemos a lo mas interesante como son los ejemplos, para ello iremos a nuestro servidor, ingresaremos y usen una base, una vez dentro primero veremos una tabla, les paso un ejemplo:
MariaDB [base1]> show columns from tabla3;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| nombre | varchar(20) | NO | | NULL | |
| apellido | varchar(20) | NO | | NULL | |
| edad | int(3) | YES | | (9 + 9) | |
| ciudad | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
5 rows in set (0.006 sec)
MariaDB [base1]>
Nota: Estas bases y tablas las genere en los posts anteriores
Como pueden ver le pedi que nos muestre las columnas de una tabla, con esta informacion nuestro siguiente paso sera ejecutar el siguiente comando:
ALTER TABLE tabla3 ALTER edad DROP DEFAULT;
En este caso le pedimos que modifique la columna edad de la tabla informada y que elimine el valor predeterminado, una vez ejecutado si todo sale bien y vuelven a ver las columnas veremos lo siguiente:
MariaDB [base1]> ALTER TABLE tabla3 ALTER edad DROP DEFAULT;
Query OK, 0 rows affected (0.006 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [base1]> show columns from tabla3;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| nombre | varchar(20) | NO | | NULL | |
| apellido | varchar(20) | NO | | NULL | |
| edad | int(3) | YES | | NULL | |
| ciudad | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
5 rows in set (0.004 sec)
MariaDB [base1]>
Ahora vamos a ejecutar el siguiente comando:
MariaDB [base1]> ALTER TABLE tabla3
-> ADD COLUMN IF NOT EXISTS
-> correo varchar(20) NOT NULL
-> AFTER apellido;
En este caso lo usamos para agregar una nueva columna a la cual llamaremos correo, le pasamos el tipo, el tamaño y que no puede ser nula por ultimo le decimos que la ubique detras de apellido, si lo ejecutamos y vemos las columnas veremos lo siguiente:
MariaDB [base1]> ALTER TABLE tabla3
-> ADD COLUMN IF NOT EXISTS
-> correo varchar(20) NOT NULL
-> AFTER apellido;
Query OK, 0 rows affected (0.095 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [base1]> show columns from tabla3;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| nombre | varchar(20) | NO | | NULL | |
| apellido | varchar(20) | NO | | NULL | |
| correo | varchar(20) | NO | | NULL | |
| edad | int(3) | YES | | NULL | |
| ciudad | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
6 rows in set (0.001 sec)
MariaDB [base1]>
Como pueden ver de una manera «muy simple» pudimos modificar nuestra tabla agregando un nuevo campo dado que nos comentaron que es necesario para notificar a las personas de la tabla, con esto pueden hacerse una idea de como se modifican nuestras tablas, si necesitan mas informacion les sugiero visitar la pagina informada anteriormente.
En resumen, hoy hemos visto como modificar una tabla, como es, para que nos sirve, algunos de los parametros que mas probablemente modifiquemos, tambien hemos visto un par de ejemplos para entender el concepto, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
