Cómo crear una tabla en MySQL

En este artículo te voy a explicar paso a paso cómo crear una tabla en MySQL. Para crear una tabla el requisito fundamental es tener una base de datos. Si no sabes cómo crear una base de datos en MySQL te lo explico aquí detalladamente.

Te voy a contar dos formas de crear una tabla en MySQL, la primera es utilizando el cliente gráfico MySQL Workbench y la otra es utilizando sentencias SQL.

Esto es todo lo que vas a encontrar en este artículo:

Escenario de ejemplo
Cómo crear una tabla con MySQL Workbench
Cómo crear una tabla en MySQL con SQL

Escenario de ejemplo

Antes de empezar vamos a describir el escenario que queremos implementar.

Como ya he mencionado antes, necesitamos una base de datos. Utilizaré la base de datos «almacen» que creé en el artículo «Cómo crear una base de datos en MySQL«.

Voy a crear la tabla «productos» que contendrá todos los productos del almacén. La estructura de la tabla será la siguiente:

La tabla tiene tres atributos: «codigo», «nombre» y «precio». Las características de cada uno se describen a continuación:

  • codigo: Es un valor numérico entero que no puede ser negativo. Identifica de forma única al producto dentro de la tabla. Es un dato necesario que no puede estar vacío.
  • nombre: Es una cadena de caracteres alfanuméricos. Representa el nombre del producto, por lo que no puede estar vacío. No puede superar los 150 caracteres.
  • precio: Es un valor numérico con decimales que no puede ser negativo. Debe almacenar 2 decimales y no superar los 6 dígitos totales. Su valor por defecto será 0.0.

Ahora que ya tenemos claros los requisitos vamos a crear la tabla.

Cómo crear una tabla con MySQL Workbench

Vamos a comenzar creando la tabla de forma gráfica utilizando MySQL Workbench. Evidentemente necesitas tener instalado MySQL Workbench para crear la tabla de esta forma.

Si no sabes cómo instalar MySQL Workbench en este tutorial te explico cómo hacerlo paso a paso.

Lo primero es seleccionar la base de datos que vamos a usar. La lista de bases de datos disponibles está en el panel lateral izquierdo de Workbench, en la pestaña Schemas. Si pinchas sobre la base de datos «almacen» se desplegarán los elementos que la componen: Tables, Views, Stored Procedures y Functions. Si pinchas en alguno de ellos verás que no contienen nada porque la base de datos está recién creada. No te preocupes ahora por ellos, los iremos viendo en detalle más adelante. Ahora nos centraremos en las tablas.

listar bases de datos mysql

Pincha con el botón derecho sobre Tables y en el menú que se despliega elige la opción Create Table:

Create table

En el panel central de Workbench se abrirá el formulario para la creación de una nueva tabla tal y como se ve en la siguiente imagen:

table workbench

En la parte superior verás dos elementos: Name y Schema. El name es el nombre que tendrá la tabla y el schema es la base de datos en la que se va a crear.

A continuación aparece la lista de columnas que tendrá la tabla (Column Name). Ahora mismo está vacía puesto que no hemos definido ninguna. Aquí tendremos que definir los atributos de la tabla y las características de cada uno, como el tipo, si se trata de un valor único, etc. Aquí también podremos definir qué atributo o columna será la clave primaria de la tabla.

Si te fijas, en la parte inferior hay una serie de pestañas: Columns, Indexex, Foreign Keys, etc. Son otros elementos que también se pueden utilizar en las tablas, pero no vamos a profundizar en ellos en este artículo. Hablaremos de ellos más adelante.

Bien, pues manos a la obra. Vamos a crear nuestra tabla.

El nombre de la tabla

Comenzaremos por el nombre. Tal y como describí en el escenario al inicio del articulo, es una tabla para almacenar los productos del almacén, por tanto, el nombre será «productos». Asegúrate que en Schema esté seleccionada la base de datos «almacen»:

mysql create table example

Las columnas de la tabla

Ahora vamos a definir las columnas que tendrá la tabla. Tenemos que definir una columna por cada atributo. Y por cada una de ellas tendremos que indicar, al menos, el nombre y el tipo de dato que almacenará. Si no conoces los tipos de datos que permite usar MySQL puedes consultar los tipos soportados en la versión 8 aquí.

Código

Voy a comenzar por el código. Se trata de un dato numérico sin decimales, es decir, un entero (INT), que no permite valores negativos. Además, este atributo es el responsable de identificar el producto de forma única dentro de la tabla, por lo que tiene una función especial, es la clave primaria (primary key). Todo esto hay que tenerlo en cuenta a la hora de definirlo. Quedaría de la siguiente forma:

create table mysql primary key

Como puedes ver, en el campo Column Name he puesto «codigo». Ese es el nombre que tendrá la columna. En el campo Datatype he puesto INT, ese es el tipo de dato que almacenará la columna. Si te fijas he marcado UN. Esto hará que el dato sea unsigned, es decir, que no sea negativo. El tipo INT por defecto también permite negativos, por tanto debes tenerlo en cuenta.

También he marcado PK y NN. PK (Primary Key) indica que esta columna es la clave primaria y NN (Not Null) indica que el valor que almacene no puede ser nulo. Una clave primaria nunca puede ser nula.

En el caso de la clave primaria, también puedes marcar AI (Auto Increment):

create table mysql auto_increment

Esto permite que el valor de la clave primaria se genere de forma automática y que sea secuencial. Si el valor de la clave es conocido y lo quieres especificar en el momento de la inserción no marques AI, solo PK y NN.

Nombre

Vamos a seguir con el nombre del producto. En este caso el nombre es una cadena de caracteres, por tanto el tipo será VARCHAR. También hay que tener en cuenta que es obligatorio y no puede quedar el dato vacío.

Quedaría de la siguiente forma:

create table mysql not null

Tal y como hemos comentado el Datatype es VARCHAR, pero si te fijas he añadido un número entre paréntesis (150). Es el número de caracteres máximo que podrá tener el dato. En este caso, el nombre del producto no podrá superar los 150 caracteres.

El tipo VARCHAR es bastante complejo, podría dedicarle un artículo entero, pero ahora debe quedarte claro que siempre que uses VARCHAR tendrás que especificar el número máximo de caracteres que podrá contener el datos sin pasarte nunca de 255.

En este caso también he marcado NN (Not Null) para evitar valores nulos y que el nombre siempre tenga valor.

Precio

El precio también es numérico, como el código, pero en este caso tendrá decimales (FLOAT o DOUBLE). En cuanto a los negativos también los descartaremos puesto que no tiene sentido un precio inferior a 0.

Teniendo en cuenta todo esto el precio quedaría de la siguiente forma:

Create table mysql unsigned

Como puedes comprobar en Datatype he puesto FLOAT. Para este caso también podría haber elegido DOUBLE. La diferencia es que el primero ocupa 4 bytes y el segundo ocupa 8 bytes. Aporta mayor precisión DOUBLE.

Los números entre paréntesis son los dígitos que se almacenarán. El primero son los dígitos que como máximo tendrá el número (parte entera + parte decimal) y el segundo es el número de dígitos que tendrá la parte decimal. (Ejemplo: 900.20 tiene 5 dígitos en total y 2 decimales por lo que cumple con la restricción FLOAT(6,2)).

En este caso también he marcado UN (Unsigned) para evitar valores negativos y, a diferencia de los anteriores, he definido un valor en Default. El valor Default será el que tome el dato en caso de que no se indique ninguno durante la inserción, evitando así que quede vacío. Ten en cuenta que Default no sustituye a Not Null. Que se inserte un valor por defecto no implica que posteriormente ese dato no pueda ser borrado y, como consecuencia, quede registrado un valor nulo.

Crear la tabla

Una vez definidas todas las columnas ya podemos crear la tabla. Basta con pulsar en Aplicar en la parte inferior:

mysql create table ejemplo

En la siguiente pantalla podemos ver la sentencia SQL que se genera a partir de la configuración que hemos establecido. Esta sentencia será la que cree la tabla. Ejecútala pulsando en Apply:

create table sql

Y si todo va bien aparecerá un mensaje de confirmación. Simplemente pulsa en Close:

create table mysql workbench

Ahora comprobaremos que se ha creado la tabla dentro de la base de datos «almacén». En el panel lateral izquierdo despliega la lista de tablas de «almacen» pinchando en Tables. Si todo ha ido bien tendrá que aparecer la nueva tabla «productos»:

mostrar tablas mysql

Como puedes comprobar el proceso es bastante sencillo. Simplemente debes tener clara la estructura de los datos y los tipos de cada uno. Workbench se encarga del resto.

Cómo crear una tabla en MySQL con SQL

Ahora vamos a ver la otra forma de crear una tabla en MySQL que es utilizando el lenguaje SQL. Utilizando sentencias SQL podemos crear desde tablas simples hasta estructuras verdaderamente complejas y optimizadas.

No quiero que este tutorial se complique en exceso así te voy a explicar cómo crear la tabla «productos» descrita en el escenario al inicio del artículo. Es una tabla bastante simple sin muchas restricciones, por lo que la instrucción SQL también lo será, pero te servirá como punto de partida para que asientes el concepto. A partir de ahí podrás empezar a crear tablas más complejas. Más adelante profundizaremos en ello.

La sintaxis básica para crear una tabla en MySQL con SQL es la siguiente:

CREATE TABLE <nombre_tabla> (
    <nombre_columna1> <definición_columna>,
    <nombre_columna2> <definición_columna>,
    ...
);

Donde nombre_tabla será el nombre que tendrá la tabla. Entre paréntesis se definen las columnas que tendrá la tabla. Hay que indicar por cada columna su nombre y su definición. Esta última se compondrá de su tipo de dato junto con otras características (no nula, unsigned, etc.).

Teniendo en cuenta esto, la instrucción SQL que nos permite crear la tabla «productos» tal y como está descrita en el escenario es la siguiente:

CREATE TABLE productos (
    codigo INT UNSIGNED NOT NULL PRIMARY KEY,
    nombre VARCHAR(150) NOT NULL,
    precio FLOAT(6,2) UNSIGNED DEFAULT 0.0
);

Puesto que la tabla que estamos creando es «productos» la instrucción SQL es:

CREATE TABLE productos (
    ...
);

Dentro de los paréntesis se encuentra la definición de las columnas. Vamos a analizar una por una:

Código

Tal y como vimos anteriormente el código es un número entero sin valores negativos. Además actúa como clave primaria:

codigo INT UNSIGNED NOT NULL PRIMARY KEY,

Por tanto, el tipo de dato es INT, además es UNSIGNED puesto que no debe tener valores negativos. Como se trata de una clave primaria lo indicaremos con la instrucción PRIMARY KEY y evitaremos que tome valores nulos con NOT NULL .

Nombre

El nombre es una cadena de caracteres, por tanto su tipo será VARCHAR:

nombre VARCHAR(150) NOT NULL

Además, debemos definir una restricción de tamaño, puesto que no puede tener más de 150 caracteres. Basta con indicarlo entre paréntesis después del tipo: VARCHAR(150).

Otra restricción de la columna «nombre» es que no puede tener valores nulos, por eso utilizamos la instrucción NOT NULL.

Precio

La última columna es el precio. En este caso se trata de un número decimal. El tipo elegido es FLOAT. También puedes usar DOUBLE tal y como te expliqué en el apartado anterior:

precio FLOAT(6,2) UNSIGNED DEFAULT 0.0

Recuerda que había una restricción de dígitos: 6 como máximo y 2 decimales. Basta con indicarlo entre paréntesis después del tipo: FLOAT(6,2).

Igual que ocurría con la columna «codigo» no queremos valores negativos, así que lo indicamos con UNSIGNED.

Y por último, con DEFAULT 0.0 definimos el valor 0.0 como valor por defecto en caso de que no se indique ninguno durante la inserción.

La clave primaria

Otra forma de especificar la clave primaria es declararla al final, después de todas las columnas:

CREATE TABLE productos (
    codigo INT UNSIGNED NOT NULL,
    nombre VARCHAR(150) NOT NULL,
    precio FLOAT(6,2) UNSIGNED DEFAULT 0.0,
    PRIMARY KEY (codigo)
);

Fíjate que la columna «codigo» está igualmente definida con su tipo y características, pero no indico que se trata de una clave primaria. La instrucción PRIMARY KEY(codigo) al final define la columna «codigo» como la clave primaria:

CREATE TABLE productos (
    codigo INT UNSIGNED NOT NULL,
    ...
    PRIMARY KEY (codigo)
);

Recuerda que en el apartado anterior te conté que se podía definir la clave primaria para que auto generase su valor de forma secuencial. Desde Workbench marcábamos la opción AI. Con SQL también podemos hacerlo usando la instrucción AUTO_INCREMENT:

CREATE TABLE productos (
    codigo INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(150) NOT NULL,
    precio FLOAT(6,2) UNSIGNED DEFAULT 0.0
);

O así:

CREATE TABLE productos (
    codigo INT UNSIGNED NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(150) NOT NULL,
    precio FLOAT(6,2) UNSIGNED DEFAULT 0.0,
    PRIMARY KEY (codigo)
);

Ejecutar la instrucción SQL

Ya tenemos definida la instrucción, ahora debemos ejecutarla (si no sabes cómo ejecutar SQL en MySQL mira aquí).

Recuerda que para crear una tabla debe existir la base de datos, así que el primer paso será elegir la base de datos que queremos usar. Para ello usaremos la siguiente instrucción:

USE almacen;

Ahora que ya está la base de datos seleccionada solo falta ejecutar la instrucción de creación que definimos anteriormente (la variante que mejor se ajuste a tus necesidades). No olvides poner punto y coma (;) al final:

CREATE TABLE productos (
    codigo INT UNSIGNED NOT NULL PRIMARY KEY,
    nombre VARCHAR(150) NOT NULL,
    precio FLOAT(6,2) UNSIGNED DEFAULT 0.0
);

Si todo va bien y no se produce ningún error* la tabla debería crearse en la base de datos. Puedes comprobarlo listando las tablas con la siguiente instrucción:

SHOW TABLES FROM almacen;

Si en la lista aparece la tabla que acabas de crear todo ha funcionado correctamente.

Espero que te haya servido este tutorial. No olvides echar un vistazo al resto de tutoriales para aprender más cosas sobre MySQL.

¡Hasta la próxima!

*NOTA: Si usas MySQL 8 es posible que te aparezca un mensaje en el que se indica que tanto unsigned como especificar el número de dígitos está obsoleto en tipos de punto flotante. Es posible que en futuras versiones ya no se puedan definir datos con decimales de esta forma.

Sígueme:

Los comentarios están cerrados.

Subir ↑