CREATE DATABASE

La sentencia CREATE DATABASE crea una nueva base de datos en el servidor MySQL. Una base de datos es un contenedor lógico que agrupa tablas, vistas, procedimientos y otros objetos relacionados. Antes de poder crear tablas o insertar datos, necesitas crear (o seleccionar) una base de datos.

Sintaxis

CREATE DATABASE nombre_base_de_datos;

El nombre debe ser único dentro del servidor. MySQL crea un directorio en el sistema de archivos con ese nombre, así que se aplican las restricciones del sistema operativo: en Linux los nombres son sensibles a mayúsculas, en Windows no lo son.

Crear una base de datos

CREATE DATABASE tienda_mysql;
Query OK, 1 row affected (0.01 sec)

Esto crea la base de datos tienda_mysql con la configuración por defecto del servidor (normalmente utf8mb4 como conjunto de caracteres y utf8mb4_0900_ai_ci como cotejamiento en MySQL 8.0).

IF NOT EXISTS

Si intentas crear una base de datos que ya existe, MySQL devuelve un error:

CREATE DATABASE tienda_mysql;
ERROR 1007 (HY000): Can't create database 'tienda_mysql'; database exists

Para evitar este error, usa IF NOT EXISTS:

CREATE DATABASE IF NOT EXISTS tienda_mysql;
Query OK, 1 row affected, 1 warning (0.00 sec)

MySQL no devuelve error, solo una advertencia. La base de datos existente no se modifica. Este patrón es especialmente útil en scripts de instalación que pueden ejecutarse más de una vez.

Especificar el conjunto de caracteres

Puedes definir el conjunto de caracteres y el cotejamiento al crear la base de datos:

CREATE DATABASE mi_app
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

utf8mb4 es el conjunto de caracteres recomendado para MySQL 8.0. Soporta todos los caracteres Unicode, incluyendo emojis y caracteres especiales de cualquier idioma.

utf8mb4_unicode_ci es un cotejamiento que compara cadenas ignorando mayúsculas/minúsculas y acentos. Es adecuado para la mayoría de aplicaciones en español. Otros cotejamientos populares son utf8mb4_0900_ai_ci (el predeterminado en MySQL 8.0, más rápido) y utf8mb4_spanish_ci (con reglas específicas del español para la ñ y la ll).

Buenas prácticas para nombres

Los nombres de las bases de datos deben ser descriptivos y seguir convenciones consistentes. Usa minúsculas y guiones bajos para separar palabras (tienda_mysql, no TiendaMySQL). Esto evita problemas de portabilidad entre sistemas operativos.

Evita caracteres especiales, espacios y palabras reservadas de MySQL. Si necesitas usar una palabra reservada como nombre (aunque no es recomendable), enciérrala entre acentos graves:

CREATE DATABASE `order`;  -- Funciona, pero no recomendado

Ver la definición

Para ver cómo se creó una base de datos existente:

SHOW CREATE DATABASE tienda_mysql;
DatabaseCreate Database
tienda_mysqlCREATE DATABASE tienda_mysql /*!40100 DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci / /!80016 DEFAULT ENCRYPTION='N' */

Esto muestra la sentencia completa que recrearía la base de datos, incluyendo el conjunto de caracteres y el cotejamiento asignados.

Permisos necesarios

Para crear una base de datos necesitas el privilegio CREATE. El usuario root tiene este privilegio por defecto. Para usuarios normales, el administrador debe concedérselo:

GRANT CREATE ON *.* TO 'usuario'@'localhost';

En el siguiente artículo veremos cómo eliminar una base de datos con DROP DATABASE.

Escrito por Eduardo Lázaro