Anuncios

Bienvenidos sean a este post, hoy veremos como modificar tablas.

Anuncios

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...];
Anuncios
Nota: 
Los modificadores en corchetes son opcionales
Anuncios
Anuncios

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.
Anuncios
ADD [COLUMN] [IF NOT EXISTS] nombreColumna parametros_columna [FIRST | AFTER columna]
Anuncios

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, ...)
Anuncios

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]
Anuncios

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]
Anuncios

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]
Anuncios

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)
Anuncios

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)
Anuncios

Esta nos permite establecer un valor predeterminado en la columna informada, este valor puede ser literal o una expresion

ALTER [COLUMN] nombreColumna DROP DEFAULT
Anuncios

Esta nos permite eliminar el valor predeterminado de la columna informada

ALTER {INDEX | KEY} nombre_indice [NOT] INVISIBLE
Anuncios

Esta nos permite establecer una clave informada como invisible o no

CHANGE [COLUMN] [IF EXISTS] nombreViejoCol nombreNuevoCol parametros_columna [FIRST | AFTER nombre]
Anuncios

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]
Anuncios

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]
Anuncios

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
Anuncios

Elimina la clave primaria de una tabla

DROP {INDEX | KEY} [IF EXISTS] nombre_indice 
Anuncios

Esta nos elimina la clave informada de una tabla, tambien poseemos el condicional para verificar su existencia

DISABLE KEYS
Anuncios

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
Anuncios

Vuelve a activar todas las claves que fueron desactivadas con la opcion anterior

RENAME [TO] nuevo_nombre_tabla
Anuncios

Esto permite renombrar la tabla actual al nuevo informado

ORDER BY nombre_columna [,nombre_columna...]
Anuncios

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
Anuncios

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
Anuncios

Esta es igual al anterior pero sera para la claves de una columna

CONVERT TO CHARACTER SET nombre_charset [COLLATE nombre_collation]
Anuncios

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/

Anuncios

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]>
Anuncios
Nota: 
Estas bases y tablas las genere en los posts anteriores
Anuncios

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;
Anuncios

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]>
Anuncios

Ahora vamos a ejecutar el siguiente comando:

MariaDB [base1]> ALTER TABLE tabla3
    -> ADD COLUMN IF NOT EXISTS
    -> correo varchar(20) NOT NULL
    -> AFTER apellido;
Anuncios

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]>
Anuncios

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.

Anuncios

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.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario