W3docs

Crear una tabla MySQL con PHP

Aprende a crear una tabla MySQL con PHP usando mysqli y PDO. Incluye sintaxis CREATE TABLE, tipos de datos, claves primarias y errores comunes.

Una tabla es donde MySQL almacena realmente las filas de datos. Antes de poder insertar usuarios, productos o publicaciones, la tabla que los contendrá debe existir, con un conjunto definido de columnas y el tipo de dato de cada columna. Esta página muestra cómo crear una tabla MySQL desde PHP usando las extensiones mysqli y PDO, explica la sintaxis de CREATE TABLE pieza por pieza y cubre los errores más frecuentes.

Si aún no has creado la base de datos donde vivirá la tabla, hazlo primero — consulta Crear una base de datos MySQL. Para un análisis más detallado de la conexión en sí, consulta Conectarse a MySQL con PHP.

Cómo funciona la creación de una tabla

Desde PHP, crear una tabla siempre consta de tres pasos:

  1. Conectar al servidor MySQL y seleccionar una base de datos. Una tabla debe pertenecer a una base de datos, por lo que la conexión debe saber cuál usar.
  2. Construir la sentencia SQL CREATE TABLE como una cadena de texto. Esto es SQL estándar — PHP simplemente la envía al servidor.
  3. Ejecutar la sentencia con mysqli_query() (mysqli) o $pdo->exec() (PDO) y verificar si tuvo éxito.

El error más común para principiantes es conectarse sin indicar una base de datos. CREATE TABLE falla entonces con "No database selected" porque el servidor no sabe dónde colocar la tabla. Los ejemplos a continuación siempre pasan el nombre de la base de datos para evitar este problema.

Conectarse y seleccionar una base de datos

mysqli_connect() recibe el nombre del servidor, el usuario y la contraseña — y, lo que es importante, un cuarto argumento opcional: el nombre de la base de datos. Pásalo para que la nueva tabla tenga un lugar donde residir.

<?php

$server   = "localhost";
$username = "username";
$password = "password";
$database = "my_app"; // the database the table will be created in

$conn = mysqli_connect($server, $username, $password, $database);

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";

?>
Información

Si creas la base de datos en el mismo script, llama a mysqli_select_db($conn, "my_app") después de crearla, o vuelve a conectar con el nombre de la base de datos como cuarto argumento antes de ejecutar CREATE TABLE.

Crear una tabla con mysqli

Una vez que la conexión tiene seleccionada una base de datos, ejecuta la sentencia CREATE TABLE con mysqli_query(). Devuelve true en caso de éxito y false en caso de error, así que comprueba siempre el resultado e imprime mysqli_error() cuando falle — ese mensaje te indica exactamente qué salió mal.

El siguiente código crea una tabla users con tres columnas: id, name y email.

<?php

$sql = "CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    email VARCHAR(50) NOT NULL UNIQUE
)";

if (mysqli_query($conn, $sql)) {
    echo "Table created successfully";
} else {
    echo "Error creating table: " . mysqli_error($conn);
}

?>

Qué significa cada parte de la sentencia

  • id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY — un entero que nunca puede ser negativo (UNSIGNED), que aumenta automáticamente en uno por cada nueva fila (AUTO_INCREMENT) y que identifica de forma única cada fila (PRIMARY KEY). Casi todas las tablas tienen una columna como esta.
  • name VARCHAR(30) NOT NULL — una cadena de longitud variable de hasta 30 caracteres. NOT NULL significa que el valor es obligatorio; una inserción sin nombre será rechazada.
  • email VARCHAR(50) NOT NULL UNIQUE — una cadena obligatoria con una restricción UNIQUE, de modo que MySQL rechaza almacenar dos filas con el mismo correo electrónico.

Tipos de datos de columna más comunes

TipoÚsalo paraEjemplo
INTNúmeros enteros, IDs, contadoresviews INT
VARCHAR(n)Texto corto de hasta n caracteresname VARCHAR(50)
TEXTTexto largo (artículos, comentarios)body TEXT
DECIMAL(p,s)Decimales exactos como preciosprice DECIMAL(8,2)
DATE / DATETIMEFechas y marcas de tiempocreated_at DATETIME
BOOLEANIndicadores verdadero/falsoactive BOOLEAN

Crear una tabla con PDO

PDO es la API más moderna y portable, y se prefiere para proyectos nuevos. El SQL es idéntico — solo cambia el envoltorio PHP. Con PDO en modo excepción, envuelves la llamada en un try/catch en lugar de comprobar un valor de retorno.

<?php

$dsn = "mysql:host=localhost;dbname=my_app";

try {
    $pdo = new PDO($dsn, "username", "password");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "CREATE TABLE users (
        id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(30) NOT NULL,
        email VARCHAR(50) NOT NULL UNIQUE
    )";

    $pdo->exec($sql);
    echo "Table created successfully";
} catch (PDOException $e) {
    echo "Error creating table: " . $e->getMessage();
}

?>

Evitar el error "la tabla ya existe"

Si ejecutas una sentencia CREATE TABLE dos veces, la segunda ejecución falla con "Table 'users' already exists". Añade IF NOT EXISTS para que la sentencia sea segura de volver a ejecutar — MySQL simplemente omite la creación cuando la tabla ya existe.

<?php

$sql = "CREATE TABLE IF NOT EXISTS users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    email VARCHAR(50) NOT NULL UNIQUE
)";

mysqli_query($conn, $sql);

?>

Errores comunes y soluciones

  • "No database selected" — te conectaste sin indicar una base de datos. Pásala como cuarto argumento a mysqli_connect() o usa mysqli_select_db().
  • "Table 'users' already exists" — usa CREATE TABLE IF NOT EXISTS, o elimina la tabla antigua primero.
  • "You have an error in your SQL syntax" — generalmente es una coma sobrante después de la última columna, o una palabra reservada como order usada como nombre de columna sin comillas graves. Rodea esos nombres con comillas graves: `order`.
  • "Access denied for user" — la cuenta MySQL no tiene privilegios CREATE en esa base de datos.

Próximos pasos

Ahora que la tabla existe, puedes empezar a trabajar con los datos que contiene:

Resumen

Crear una tabla desde PHP se reduce a conectarse con una base de datos seleccionada, escribir una sentencia CREATE TABLE que defina cada columna y su tipo, y ejecutarla con mysqli_query() o PDO::exec(). Comprueba siempre los errores, añade IF NOT EXISTS para scripts que puedas volver a ejecutar, y elige un tipo de dato adecuado para cada columna para que MySQL almacene tus datos de forma eficiente y segura.

Práctica

Práctica
¿Cuáles son los pasos necesarios para crear una tabla MySQL en PHP?
¿Cuáles son los pasos necesarios para crear una tabla MySQL en PHP?
Was this page helpful?