15, diciembre - 2018

Las tablas en MySQL

Las tablas en MySQL, ¿Qué son..? y, ¿Cómo se manejan..?

Los servidores de bases de datos MySQL administran las distintas informaciones y datos que almacenan por medio de tablas, filas y columnas. En este caso vamos a ver qué son las tablas de MySQL, con qué comandos podemos crearlas y cómo hacer uso de ellas, todo como siempre desde la consola de comandos por medio de instrucciones escritas.

¿Qué son las tablas de MySQL?

Bien, las tablas de las bases de datos SQL y MySQL son lugares de almacenamiento virtual donde se pueden guardar conjuntos de datos, estos sitios o lugares están predefinidos y marcan filas de informaciones similares, así como los conjuntos de datos que después se podrán almacenar en las filas que formen cada una de las tablas de nuestras bases de datos.

Si nos fijamos en la imagen a continuación podemos ver que se trata de un modelo esquematizado de una base de datos ya creada, en él, cada una de las cajas que delimitan filas serían las tablas, si observamos también, en ellas podemos ver filas nombradas de forma lógica en las que se almacenará posteriormente la información que configure la propia base de datos.
Del mismo modo, las tablas pueden y deben estar inter-relacionadas entre sí, marcando si una tabla es parte del funcionamiento lógico de otra y de ese modo, actuando en consecuencia cuando se almacenen datos en ellas. Por ejemplo, la tabla principal “film” tiene anidadas el resto de tablas para formar relaciones de datos, relaciones que marcarán que los datos son subyacentes a la información que almacene la propia tabla principal.

¿Qué tipo de tablas podemos crear?

Los tipos de tablas que podemos crear en MySQL son variados, y a medida que el servidor de bases de datos va evolucionando pueden aparecer nuevos tipos (aunque esto sucede en periodos bastante espaciados en el tiempo).
A la hora de decidir si usar unos u otros tendremos que pensar en las necesidades propias que tengamos con respecto a la tabla en concreto que estemos creando, si por ejemplo necesitamos que sea una tabla de fácil acceso y rápida a la hora de procesar datos, o si al contrario lo que nos importa es la capacidad de almacenamiento que posea indiferentemente de su velocidad, también, qué tipo de relaciones tendrá con el resto de tablas de la base de datos, etc…
Son cuestiones que nos podremos plantear a la hora de configurar y crear las distintas tablas de una base de datos.

De ese modo:

Tablas con mayor velocidad de procesamiento de datos

Las tablas que poseen una mayor velocidad de procesamiento de datos son, las que almacenan la información y trabajan desde la propia memoria RAM del servidor de datos, esto puede ser peligroso ya que dicha memoria RAM tiene un límite, más en servidores compartidos o hosting, de ese modo, debemos tener cuidado de no sobrecargar esa memoria si no queremos que produzca el efecto contrario y la velocidad caiga de forma drástica.

Tablas con mayor capacidad de almacenamiento de datos

Las tablas con mayor capacidad de almacenamiento de datos son las que el servidor de bases de datos logra comprimir en su propio sistema, de ese modo se pueden almacenar mayores cantidades de datos, en contrapartida, su versatilidad será menor al estar comprimida y el número de opciones que tendremos será menor si lo comparamos con las tablas que no estén comprimidas.

Tipos de tablas que podemos crear en MySQL o lo que es igual, tipos de motores de almacenamiento

Veamos pues qué tipos de tablas podemos crear con MySQL y qué particularidades tiene cada una de ellas.

Tablas MyISAM

Este tipo de tablas son que utiliza el sistema por defecto, a no ser que se tenga marcada una configuración distinta en los archivos de configuración de nuestra base de datos. Se trata de tablas NO transaccionales o lo que es igual, que no pueden tener relaciones unas con otras, son tablas rápidas en las que prima la velocidad a la hora de trabajar o manipular datos, ya sean de entrada o salida. Otra característica que poseen es que permiten la posibilidad de soportar búsquedas fulltext, lo que significa que podemos ordenar la búsqueda de textos complejos en las consultas Query que se realicen posteriormente.

Tablas MEMORY

Este motor de almacenamiento permite el almacenamiento de datos en memoria, de igual forma que los motores MyISAM se trata de tablas de formato rápido que NO admiten la transacción entre más tablas, son recomendadas para listados o filas de datos únicos a los que se tendrá acceso de forma continuada y sobre los que se podrán realizar consultas Query también de forma masiva o continua.

Tablas MERGE

El motor de almacenamiento Merge permite la creación de un conjunto de tablas en formato MyISAM que el sistema tratará como si fuera una única tabla. Igual que las anteriores se trataría de tablas en las que prima la velocidad de acceso y proceso de datos, y serían tablas NO transaccionales.

Tablas InnoDB y BDB

Son tablas o motores de almacenamiento de datos que SÍ soportan la transacción de datos entre distintas tablas que de igual modo soporten la creación de relaciones entre unas y otras. Son tablas menos rápidas pero por el contrario son tablas en las que se pueden almacenar grandes cantidades de datos, permiten la realización de búsquedas aunque estas tendrán que enfocarse a filas de datos en las que haya creado un índice previamente, de lo contrario los tiempos de procesamiento de esas búsquedas pueden alargarse y llegar a ser un problema en los sistemas que tengan que trabajar de manera fluida y veloz.

Tablas EXAMPLE

Este tipo de tablas se crean únicamente con fines didácticos ya que no sirven absolutamente para nada, no pueden almacenar y procesar ningún tipo de datos. Su uso es indicado para fines de ilustración en los que se tenga que crear dicha tabla como ejemplo de algo, o como simple aprendizaje.

Tablas NDB Cluster

Este tipo de tabla o de motor de almacenamiento de datos es el que provee MySQL cuando sea necesario el particionado de la tabla en varias máquinas diferentes, de ese modo, cada una de las particiones que configuren la tabla al completo podrá estar alojada en distintas particiones de disco o incluso en distintos sistemas operativos o máquinas servidores de bases de datos. Está pensado inicialmente para sistemas operativos inspirados en Linux aunque MySQL prevé sacar alternativas para máquinas Windows y MacOS.

Tablas ARCHIVE

Se utiliza para almacenar la mayor cantidad de datos posible en MySQL con la particularidad de no permitir la creación de índices en su interior. Tampoco permiten la transacción entre otras tablas y la velocidad es otro factor que prácticamente no se ha de tener en cuenta a la hora de configurar una tabla de este tipo.

Tablas CSV

El motor de almacenamiento CSV es el indicado para el traslado de datos a otros softwares o la migración de datos entre diferentes tipos de plataformas, es ideal por ejemplo para trasladar el contenido de una tabla MySQL a una hoja de cálculo de cualquier desarrollador. Se caracteriza por la separación de los distintos datos que contenga por algún tipo de delimitador, por lo general el signo de punto y coma.

Tablas FEDERATED

Este fue el último tipo de motor de almacenamiento que incorporaron las bases de datos de MySQL y permite el almacenamiento de los datos en una tabla remota. Su uso pasa por la instalación de la API MySQL C Client.

Nota: Podéis ver más información acerca de los tipos de motores de almacenamiento de los sistemas de bases de datos MySQL desde este estupendo enlace
Tipos de motores de almacenamiento en MySQL

¿Cómo se pueden crear tablas en MySQL?

Para poder crear tablas desde la consola de comandos usaremos la instrucción CREATE TABLE seguido por el nombre de la tabla que queramos crear, y de las columnas que vaya a tener nuestra tabla separadas por comas. El usuario que desee crear tablas en MySQL debe tener privilegios de creación (create).

A continuación veamos cómo sería la creación de una tabla simple donde poder guardar datos de los distintos clientes que vayamos almacenando, recordemos que estamos siguiendo el ejemplo de este apartado de la web donde trabajamos con la base de datos sfact, la cual servirá para poder llevar la contabilidad de una empresa y su sistema de facturación.


mysql>USE sfact;


mysql>CREATE TABLE clientes (
idcliente INT(10) AUTO_INCREMENT PRIMARY KEY,
dni CHAR(10) NOT NULL,
nombre CHAR(30) NULL,
apellidos CHAR (30) NULL,
razonsocial VARCHAR(50) NOT NULL,
cif_nif CHAR(10) NOT NULL,
direccion VARCHAR(50) NOT NULL,
poblacion CHAR(30) NOT NULL,
provincia CHAR(30) NOT NULL,
codigopostal SMALLINT(6) NOT NULL,
email VARCHAR(70) NOT NULL,
telefono CHAR(10) NOT NULL DEFAULT '1234567890',
movil CHAR(9) NULL,
fechaingreso DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
fechaultimoscambios TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB;

De esta forma tendríamos configurada nuestra tabla con motor de almacenamiento InnoDB para poder crear relaciones con otras tablas, relaciones que se crearán en capítulos posteriores.

Veamos ahora cómo hemos configurado y creado la tabla:

  • La sintaxsis de creación de campos en la tabla sería la siguiente:
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,…)
    [table_options]
    [partition_options]
    O:
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,…)]
    [table_options]
    [partition_options]
    select_statement
    O:
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }
    No es necesario que se rellene toda la información en el comando de creación de campos, solo la que sea necesaria en cada campo que se cree.
  • El primer casillero de nuestra tabla “idcliente”, almacenará los números identificativos de cada cliente dentro de la tabla, estos números serán únicos y los irá generando de forma automática la aplicación gracias a la instrucción AUTO_INCREMENT, la otra instrucción PRIMARY KEY está indicando que será el índice primario de la tabla, el más importante y el que usará después MySQL para realizar búsquedas dentro de los datos que almacenemos, también, el número que nos permitirá relacionar a clientes concretos con campos de otras tablas de la base de datos, si por ejemplo tenemos otra tabla en la que almacenamos información de facturas generadas, ese campo será el que indiqué de qué cliente se trata en la tabla facturas, pero eso lo veremos más adelante.
  • Los campos con la instrucción NOT NULL están indicando que no pueden quedarse en blanco y que son necesarios para poder generar un registro nuevo, un nuevo cliente.
  • Los campos con la instrucción NULL indican que ese será su valor por defecto, mejor que dejarlos en blanco ya que el sistema puede trabajar de forma más potente.
  • Los campos con las fechas tanto de ingreso como de últimos cambios tienen los formatos DATETIME en el caso de la fecha de ingreso, la cual tendrá que ser marcada en el momento de inserción del nuevo cliente (si no se marca se generará un registro con el dato por defecto) y TIMESTAMP (este tipo de valor solo puede estar presente en uno de los campos de almacenamiento de datos) que se generará de forma automática cada vez que se modifique alguno de los valores de un cliente ya registrado.

De esta forma tendríamos creada la tabla que almacenaría los datos de cada uno de los clientes nuevos que guardemos en la base de datos sfact.

¿Cómo podemos renombrar una tabla ya creada?

Es posible el renombrado de tablas ya creadas en MySQL, siempre que el nombre nuevo que vaya a tener la tabla no exista ya en ninguna otra tabla de la misma base de datos. Para realizar el renombrado usaremos la instrucción RENAME TABLE, la cual tendría la siguiente sintaxis:

RENAME TABLE nombretablaexistente TO nuevonombre [, nobretablaexistentedos TO nuevonombreatablaexistentedos];

Se trataría así mismo de una operación denominada “atómica”, lo cual significa que ninguna otra instrucción se podrá ejecutar mientras el sistema esté ejecutando el renombrado.

Vemos su uso a continuación:


mysql>RENAME TABLE clientes TO clientesfac;

De esa forma le habríamos cambiado el nombre a la tabla clientes por clientesfac

¿Cómo se pueden añadir, borrar o modificar campos de las tablas ya creadas?

Del mismo modo, podemos añadir nuevos campos a una tabla ya creada, modificar los ya existentes o eliminar alguno en caso de ser necesario.
Todo esto lo podríamos hacer gracias a la instrucción ALTER TABLE, cuya sintaxis general es la siguiente:

ALTER [IGNORE] TABLE nombretabla alteracionspecial [, segundalteracionspecial …];

Donde alteracionspecial puede valer una de los siguientes opciones:

ADD [COLUMN] definiciondecolumna [FIST | AFTER nombrecolumna]

ADD [COLUMN] (definiciondecolumna, definiciondecolumna2, …)

ADD INDEX [indexname] (indexnombrecolumna, indexnombrecolumnados, …)

ADD PRIMARY KEY (indexnombrecolumna, indexnombrecolumnados, …)

ADD UNIQUE [indexname] (indexnombrecolumna, indexnombrecolumnados, …)

ADD [CONSTANT symbol] FOREING KEY indexname (indexnombrecolumna, indexnombrecolumnados, …) [referencedefinition]

ALTER COLUMN colname {SET DEFAULT literal | DROP DEFAULT}

CHANGE [COLUMN] oldcolname newcolname [FIRST | AFTER colname]

MODIFY [COLUMN] createdefinition [FIRST | AFTER columname]

DROP [COLUMN] colname

DROP PRIMARY KEY

DROP INDEX indexname

RENAME [TO] newtablename

ORDER BY col

Siguiendo con nuestra creación de la tabla “clientesfac”, vamos a añadir algunos índices que no se habían añadido en la instrucción anterior de creación. Los índices son los recursos que después podrá utilizar la base de datos para poder acceder a las filas y columnas de forma más rápida y robusta. Ya vimos qué era el índice primario o PRIMARY KEY que han de llevar casi todas las tablas, pero existen otros tipos de indexaciones que pasamos a describir a continuación.

  • PRIMARY KEY: Este índice se ha creado para generar consultas especialmente rápidas, debe ser único y no se admite el almacenamiento de NULL.
  • KEY o INDEX: Son usados indistintamente por MySQL, permite crear indices sobre una columna, sobre varias columnas o sobre partes de una columna.
  • UNIQUE: Este tipo de índice no permite el almacenamiento de valores iguales.
  • FULLTEXT: Permiten realizar búsquedas de palabras. Sólo pueden usarse sobre columnas CHAR, VARCHAR o TEXT
  • SPATIAL: Este tipo de índices solo puede usarse sobre columnas de datos geométricos (spatial) y en el motor MyISAM

Por lo tanto, añadiremos un índice UNIQUE para los campos de introducción de email, DNI y NIF_CIF, podrá ser el mismo y de esa forma nos aseguraremos que no existe ningún cliente repetido en la base de datos. Dando por echo que cada email o documento identificativo será distinto en todos los registros que se creen.

También añadiremos un índice INDEX para la columna de razón social, de ese modo las consultas que se realicen para buscar una determinada empresa en la base de datos se realizarán de forma más rápida, no podemos crear un FULLTEXT ya que nuestra tabla es InnoDB y no permite el uso de este tipo de índices, sino sería más adecuado.


mysql>ALTER TABLE sfact.clientesfac 
ADD UNIQUE INDEX UNICOS (dni ASC, cif_nif ASC, email ASC);

ALTER TABLE sfact.clientesfac 
ADD INDEX RSOCIAL (razonsocial ASC);

ALTER TABLE sfact.clientesfac 
ADD INDEX MAIL (email ASC);


Nota: podemos verificar si MySQL ha llevado a cabo las modificaciones que hayamos indicado usando el comando DESCRIBE (nombredetabla), de ese modo el sistema nos mostrará de nuevo toda la configuración de la tabla, con las modificaciones que hayamos llevado a cabo.

También es importante mencionar que, para las instrucciones en las que utilicemos el comando ALTER TABLE, el sistema realizará una copia completa de la tabla, copia temporal, después, creará las modificaciones sobre esa copia temporal para terminar destruyendo la tabla original y renombrando la copia temporal con el mismo nombre que tuviese la tabla. De esa forma, los comandos de lectura que se ejecuten en el momento de realizar las modificaciones sí serán accesibles, el resto no, el resto tendrán que esperar a que termine la operación para poder realizarse, sin que esto genere un error ya que pasan a espera de forma automática. Los comandos con la opción RENAME de MySQL se efectuarán directamente sobre la tabla, sin que genere ningún tipo de alteración en su funcionamiento en tiempo real.

Por otro lado, la instrucción IGNORE servirá para indicar a MySQL qué tipo de funcionamiento tendrán los comandos o instrucciones ALTER TABLE, por ejemplo, en el caso de creación de un índice UNIQUE, si se especifica esta opción y la columna tiene registros NO únicos, no generará un error y simplemente no creará dicho índice sin que esto altere el funcionamiento de posibles consultas posteriores, si no se especifica MySQL generará un error deteniendo la instrucción de comandos que se estén ejecutando tras el intento.

¿Cómo podemos eliminar una tabla existente?

Para eliminar tablas en MySLQ y también todos los datos que contengan, así como los índices y claves foráneas que se hayan creado, usaremos el comando DROP TABLE, sin mayores inconvenientes que los de tener en cuenta lo mencionado, que con el borrado de la tabla se perderán todos los registros que se hayan generado, y que si esa tabla tiene relaciones con otras tablas del sistema habrá que tener en cuenta qué tipo de relaciones son ya que podrán alterar a esas otras tablas a las que esté enlazada por medio de claves foráneas (que veremos más adelante).

Su uso sería el siguiente


mysql>DROP TABLE nombredelatabla;

¿Te ha parecido interesante este contenido..?
En ese caso, te pedimos por favor que nos des tu valoración graicas a esto podemos mejorar nuestras lecciones. Gracias.
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Social Media

  • YouTube

    Suscríbete a nuestro canal de YouTube para ver todos nuestros vídeos sobre programación

  • Twitter

    Síguenos en Twitter e infórmanos de ello, es muy probable que también te sigamos

  • Facebook

    Estamos pensando si abrir una página de Facebook o no...

  • LinkedIn

    En breve...

  • Instagram

    En breve...

  • Github

    En breve...