Crear la base de datos y la tabla empleados (SQL)



Crear un CRUD en PHP y MySQL: base de datos y tabla empleados (paso a paso) 🧩

Si quieres construir un CRUD real (Create, Read, Update, Delete) con PHP y MySQL, lo primero es tener una base de datos bien definida.

En este caso de estudio vamos a trabajar con una tabla llamada empleados, diseñada para ser simple pero completa, ideal para practicar:


  • Claves primarias (PK)
  • Validaciones por longitud
  • Búsquedas con LIKE
  • Estados activo/inactivo
📌 Este ejemplo está pensado para usarse con un CRUD en PHP (PDO) + Bootstrap, como el que tengo publicado aquí: /casos-de-estudio/.

1) Crear la base de datos (ejemplo)


Puedes llamarla como quieras. Yo usaré un nombre claro:

CREATE DATABASE IF NOT EXISTS floopware_casos
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

USE floopware_casos;

Por qué utf8mb4: soporta tildes, caracteres especiales y emojis sin problemas.



2) Crear la tabla empleados


Esta tabla usa codigo como clave primaria (PK). En el CRUD, este campo se usa como identificador único y se bloquea al editar (buena práctica).

Yo recomiendo utf8mb4 para un proyecto moderno.
CREATE TABLE IF NOT EXISTS empleados (
  codigo           VARCHAR(10)  NOT NULL,
  nombres          VARCHAR(50)  NOT NULL,
  lugar_nacimiento VARCHAR(30)  NOT NULL,
  fecha_nacimiento VARCHAR(30)  NOT NULL,
  direccion        VARCHAR(50)  NOT NULL,
  telefono         VARCHAR(10)  NOT NULL,
  puesto           VARCHAR(15)  NOT NULL,
  estado           INT(11)      NOT NULL DEFAULT 1,
  PRIMARY KEY (codigo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

¿Qué significa cada campo?


  • codigo (PK): identificador único (ej. EMP001)
  • nombres: nombre completo
  • lugar_nacimiento: ciudad/país (lo que tú quieras)
  • fecha_nacimiento: en tu caso es texto, por eso aceptas formato libre (ideal: YYYY-MM-DD)
  • direccion: dirección corta
  • telefono: texto para permitir números sin perder ceros
  • puesto: puesto del empleado
  • estado: 1 activo / 0 inactivo

3) Insertar datos de ejemplo (recomendado para la demo)


Esto es muy útil para que al entrar al CRUD no se vea vacío.

INSERT INTO empleados (codigo, nombres, lugar_nacimiento, fecha_nacimiento, direccion, telefono, puesto, estado) VALUES
('EMP001', 'Ana Pérez', 'Valencia', '1995-08-12', 'Calle Sol 123', '600123456', 'Soporte', 1),
('EMP002', 'Luis Gómez', 'Madrid',   '1990-04-22', 'Av. Centro 45', '611987654', 'Ventas', 1),
('EMP003', 'Marta Ruiz', 'Sevilla',  '1998-11-03', 'C/ Luna 7',     '622112233', 'Admin',  0);

4) Consejo pro: ¿dejar fecha_nacimiento como VARCHAR o cambiar a DATE?

En tu tabla está como VARCHAR(30) y eso funciona.

Pero si quieres dar un salto de calidad, lo ideal es DATE, porque te permite:

  • Calcular edad
  • Filtrar por rangos
  • Ordenar fechas correctamente


Opción mejorada (si algún día lo cambias):

ALTER TABLE empleados
  MODIFY fecha_nacimiento DATE NOT NULL;
Si lo cambias a DATE, también te conviene usar un <input type="date"> en el formulario.

5) Enlazar esto con tu conexión PDO (lo que sigue)


Una vez creada la base de datos, el siguiente paso es conectar tu CRUD a MySQL con PDO (tu archivo includes/con.php), usando:

  • PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
  • utf8mb4
  • Consultas preparadas

👉 En el siguiente post lo vamos a hacer, explicándolo línea por línea.




Post relacionados: