Apuntes mysql

“SET PASSWORD has no significance for user 'root'@'localhost'”

Tipos de Tablas en MySQL y Consideraciones Prácticas

En MySQL, el tipo de tabla está determinado por el motor de almacenamiento que se elija al momento de crearla. Cada motor tiene sus propias ventajas, limitaciones y casos de uso recomendados.

Motores de almacenamiento comunes

1. InnoDB (por defecto)

Motor moderno, transaccional y confiable. Es el predeterminado desde MySQL 5.5.

Ventajas:

  • Soporta transacciones (BEGIN, COMMIT, ROLLBACK)

  • Claves foráneas y restricciones de integridad

  • Bloqueo a nivel de fila (mejor para concurrencia)

  • Recuperación automática ante fallos

Uso típico: Aplicaciones web, sistemas financieros, bases de datos relacionales complejas.

2. MyISAM

Motor clásico, reemplazado por InnoDB como predeterminado. Sencillo y veloz para lecturas.

Ventajas:

  • Muy rápido en SELECT grandes

  • Bajo consumo de recursos

Limitaciones:

  • No soporta transacciones ni claves foráneas

  • Bloqueo a nivel de tabla

Uso típico: Sitios informativos o sistemas donde la escritura es poco frecuente.

3. MEMORY (antes HEAP)

Guarda los datos en RAM.

Ventajas:

  • Lectura/escritura ultrarrápidas

  • Ideal para tablas temporales

Limitaciones:

  • Volátil: los datos se pierden al reiniciar

  • No admite tipos BLOB o TEXT

Uso típico: Caché, sesiones o estructuras de soporte en tiempo real.

4. ARCHIVE

Diseñado para almacenar datos históricos comprimidos. Solo permite inserciones y lecturas.

Ventajas:

  • Gran compresión

  • Muy eficiente en espacio para datos raramente consultados

Limitaciones:

  • No permite UPDATE ni DELETE

  • Índices limitados

Uso típico: Logs, auditorías, backup de registros.

5. CSV

Los datos se almacenan como archivos .csv, legibles fuera de MySQL.

Ventajas:

  • Fácil interoperabilidad

  • Legible desde Excel u otras herramientas

Limitaciones:

  • Sin índices, claves, ni control transaccional

Uso típico: Intercambio de datos entre sistemas.

¿Qué pasa si no indico el tipo de tabla?

Cuando no se especifica el motor, se usa el que esté configurado como predeterminado:

SHOW VARIABLES LIKE 'default_storage_engine';

Aunque ese valor suele ser InnoDB, puedes forzarlo así:

CREATE TABLE productos (
  id INT PRIMARY KEY,
  nombre VARCHAR(100)
) ENGINE=InnoDB;

Razones para no usar InnoDB (en ciertos casos)

Aunque es robusto, InnoDB no siempre es la mejor opción:

  • Proyectos de solo lectura o informes masivos: MyISAM puede ser más rápido.

  • Espacio en disco: InnoDB usa archivos internos (ibdata1, ibtmp1, etc.) que pueden crecer bastante.

  • Simplicidad extrema: En proyectos educativos o prototipos sin transacciones, puede ser innecesariamente complejo.

  • Tablas volátiles o temporales: MEMORY será mucho más rápido y directo.

Codificación (CHARACTER SET) y COLLATE

Al guardar texto, también importa cómo se codifica y compara.

CHARACTER SET

Define cómo se almacenan los caracteres internamente.

  • utf8 → hasta 3 bytes por carácter (obsoleto)

  • utf8mb4 → hasta 4 bytes. Recomendado. Soporta emojis y caracteres internacionales

COLLATE

Define cómo se comparan las cadenas:

  • utf8mb4_general_ci → Comparación general, insensible a mayúsculas

  • utf8mb4_spanish_ci → Ordenación adaptada al español

  • utf8mb4_bin → Comparación exacta, sensible a mayúsculas/acentos

Ejemplo completo

CREATE TABLE clientes (
  id INT PRIMARY KEY,
  nombre VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_spanish_ci;
TOP