Fundamentos Esenciales de SQL: Restricciones, DML y Motores de Almacenamiento

Restricciones en Tablas

Restricciones a Nivel de Columna

  • PRIMARY KEY: Define la clave primaria.
  • REFERENCES: Define claves ajenas (Foreign Keys).
  • NULL / NOT NULL: Indica si el campo es opcional (NULL) u obligatorio (NOT NULL).
  • DEFAULT: Especifica un valor por defecto para la columna.
  • UNIQUE: Asegura que todos los valores en la columna sean diferentes, identificando cada fila de manera única.
  • CHECK: Permite definir una condición de comprobación para los valores de la columna. Ejemplo: Filtrar un rango de valores o definir un formato específico (como un código postal).
  • AUTO_INCREMENT: Utilizado para columnas autonuméricas.

Restricciones a Nivel de Tabla

Las restricciones a nivel de tabla se definen después de todas las columnas.

  • General (Sin Nombre):
    • PRIMARY KEY: Definición de clave primaria compuesta.
    • FOREIGN KEY…REFERENCES: Definición de clave ajena.
  • CONSTRAINT (Con Nombre): Permite asignar un nombre específico a la restricción para facilitar su gestión posterior.

Integridad Referencial

Para conseguir integridad referencial en MySQL, es necesario aplicar el motor InnoDB a las tablas y enlazar las columnas mediante claves ajenas (Foreign Keys). Existen dos posibles eventos que definen el comportamiento ante modificaciones en la tabla principal:

  • ON DELETE: Define la acción a tomar cuando se elimina un registro principal.
  • ON UPDATE: Define la acción a tomar cuando se modifica la clave primaria principal.

Existen cuatro posibles valores para cada uno de estos eventos:

  • RESTRICT: Es el comportamiento por defecto. Impide realizar modificaciones (borrado o actualización) que atenten contra la integridad referencial si existen registros secundarios relacionados.
  • CASCADE: Borra o actualiza automáticamente los registros de la tabla dependiente cuando se borra o actualiza el registro de la tabla principal.
  • SET NULL: Establece a NULL el valor de la clave secundaria cuando se elimina o modifica el registro en la tabla principal (solo si la columna secundaria acepta valores NULL).
  • NO ACTION: El servidor MySQL rechaza la operación de eliminación o actualización para la tabla primaria si hay un valor de clave externa relacionado en la tabla referenciada.

Características de Tabla

Estas características definen la tabla e implican configuraciones concretas en todas sus columnas.

  • ENGINE: Permite definir el motor que utilizará la tabla. Los dos motores más utilizados son MyISAM e InnoDB.
    • InnoDB: Es más completo, permite integridad referencial, transacciones y es más pesado y lento en ciertas operaciones.
    • MyISAM: No permite tantas características (no soporta integridad referencial ni transacciones) y es más ligero y rápido en operaciones de solo lectura.
  • AUTO_INCREMENT: Característica de la tabla que almacena cuál será el siguiente valor para el campo auto-incremental.
  • CHARACTER SET: Conjunto de caracteres que se asigna a la tabla (Ejemplo: spanish_ci).
  • COLLATE: Conjunto de reglas de cotejamiento que se aplican a la tabla (Ejemplo: spanish_ci2).
  • CHECKSUM: Comprobación de fila. Permite guardar información para saber si una fila ha sido dañada o modificada. Es un sistema de control de errores para las filas de una tabla.
  • COMMENT: Permite añadir una descripción para la tabla.
  • MAX_ROWS: Indica el número máximo de filas que debe ser capaz de almacenar la tabla.
  • MIN_ROWS: Prepara la tabla para tener como mínimo X filas, aunque puede llegar a tener 0 filas en algún momento.

Modificadores de Tablas (DDL)

La sentencia ALTER TABLE permite modificar la estructura de una tabla existente.

  • ALTER TABLE: Sentencia principal para modificar una tabla.
  • ADD: Permite añadir una nueva columna o restricción. Ejemplo: ALTER TABLE socios_2a ADD (dirección_correo_e varchar (9)); (Si no se especifica NOT NULL, no puede ser obligatoria). ALTER TABLE socios_2a ADD crédito INT(10) AFTER teléfono;
  • DROP: Permite borrar una columna o restricción.
  • MODIFY: Permite modificar el tipo de dato y las restricciones de una columna.
  • CHANGE: Permite renombrar una columna y, opcionalmente, cambiar su tipo de dato.
  • RENAME TO: Permite renombrar la tabla completa.

Lenguaje de Manipulación de Datos (DML)

El DML (Data Manipulation Language) incluye las sentencias utilizadas para gestionar los datos dentro de las tablas.

  • SELECT: Consulta y recuperación de datos.
  • INSERT: Inserción de nuevas filas.
  • DELETE: Borrado de filas.
  • UPDATE: Modificación de filas existentes.

UPDATE: La sentencia UPDATE permite modificar el contenido existente de cualquier columna de cualquier fila de una tabla. Se utiliza cuando se necesita modificar datos ya almacenados.

DELETE: Sentencia SQL que permite el borrado de registros de una tabla.

Funciones de Comparación

  • GREATEST: Retorna el mayor valor de una lista de dos o más valores.
  • LEAST: Retorna el menor valor de una lista de dos o más valores.
  • IFNULL: Devuelve un valor especificado si la expresión es NULL. Si la expresión no es nula, devuelve la expresión original.
  • ISNULL: Devuelve 1 si una expresión es NULL. De lo contrario, devuelve 0.
  • STRCMP: Compara dos cadenas basándose en los códigos ASCII para determinar si son iguales o si una es mayor que la otra. (Función muy utilizada).

Funciones del Sistema

  • DATABASE: Retorna el nombre de la base de datos actual en uso.
  • USER: Muestra el nombre del usuario actualmente conectado.
  • VERSION: Muestra la versión actual del servidor mediante una cadena de texto.

Integridad Referencial y Motores de Almacenamiento

A la hora de borrar, no se pueden eliminar filas referenciadas mediante clave desde la misma u otras tablas si la integridad referencial lo impide (comportamiento RESTRICT o NO ACTION).

Las claves ajenas sirven para relacionar tablas y limitar los valores que puede tomar esa columna a los existentes en la columna que referencian o a valores nulos.

Comparativa de Motores de Almacenamiento

El motor MyISAM ofrece mayores prestaciones en velocidad al no tener que gestionar la integridad referencial ni las transacciones.

Ventajas

  • MyISAM: Es el más adecuado para una alta tasa de consultas de solo lectura (SELECT) y operaciones no transaccionales.
  • InnoDB: Es el más adecuado para operaciones paralelas de inserción, actualización y eliminación (debido al bloqueo de nivel de fila) y operaciones transaccionales (debido a la función de retroceso o rollback).
  • El motor de memoria (HEAP): Es el más adecuado para un acceso rápido a los datos, ya que todo está almacenado en la RAM.

Contras

  • MyISAM: Es peor para una alta tasa de consulta de inserción/actualización (debido al bloqueo de nivel de tabla).
  • InnoDB: Es peor cuando hay una combinación de operaciones no transaccionales y de solo lectura intensiva.
  • El motor de memoria (HEAP): Es peor para el uso a largo plazo (debido a problemas de integridad de datos, ya que se pierde al reiniciar) y operaciones transaccionales.

Filtros y Cláusula WHERE

La cláusula WHERE impone condiciones a los registros para que sean incluidos en el resultado de la consulta.

Los filtros se construyen mediante expresiones (combinación de operadores, operandos y funciones que devuelven un resultado booleano).

Operadores Utilizados en WHERE

  • Operadores Aritméticos: +, -, *, /, %.
  • Operadores Relacionales: >, <, <> (o !=), >=, <=, =.
  • Operadores Lógicos: AND, OR, NOT.
  • Operadores Especiales: IN, IS NOT, LIKE, BETWEEN.
  • Operandos Constantes: Valores fijos (Ejemplos: 1, 'Nacho', '2010-01-02').
  • Operandos Variables: Nombres de columnas (Ejemplos: columna1, columna2).
  • Funciones.

Ejemplos de Sintaxis de Consulta

SELECT * FROM <TB>;
SELECT <COL1> FROM <TB> WHERE <COL1>=<VALOR> AND (<COL1>=<VALOR> OR <COLORES>=<VALOR>);
SELECT <cols> FROM <TB> WHERE <col1> IN (<valorA>, <valorB>, ...);
SELECT <cols> FROM <TB> WHERE <col1> BETWEEN <valorA> AND <valorB>;
SELECT <cols> FROM <TB> WHERE <col1> IS [NOT] NULL;
SELECT <cols> FROM <TB> WHERE <col1> LIKE <patrón>;

Uso del Operador LIKE

El operador LIKE permite comparar patrones de texto. Dentro del patrón se utilizan caracteres comodines:

  • %: Hace referencia a uno o varios caracteres (incluyendo ninguno).
  • _: Hace referencia a un solo carácter.

Operador IS

El operador IS se utiliza para verificar si un valor es nulo o no nulo (IS NULL / IS NOT NULL).

Ordenación de Resultados (ORDER BY)

La cláusula ORDER BY permite ordenar el resultado de una consulta por una o varias columnas del resultado, indicando el nombre de la columna o su número posicional.

  • Sintaxis: ORDER BY <Col> | <nº> [ASC | DESC]
  • ASC: Orden ascendente (por defecto).
  • DESC: Orden descendente.

Filtro LIMIT

La cláusula LIMIT impone condiciones al número de registros devueltos por el resultado. El primer registro devuelto tiene el índice 0.

Admite dos sintaxis:

  • Recuperar X registros: LIMIT X (Recupera los primeros X registros).
  • Recuperar X registros con desplazamiento: LIMIT Y, X (A partir del índice Y, recupera X registros).

Si se indican dos números (LIMIT offset, count), el primer número (offset) indica el índice de la primera fila que se desea mostrar, y el segundo número (count) indica cuántas filas se desean recuperar.

Consultas Resumen y Agregación

Son consultas complejas que extraen información calculada de conjuntos de registros. Convierten un conjunto variable de registros en un dato simple o en grupos de datos.

Funciones de Columna / Funciones Resumen (Agregación)

  • SUM: Devuelve la suma de los valores de una columna.
  • AVG: Devuelve el valor promedio para la columna.
  • MIN: Encuentra el valor mínimo en la columna.
  • MAX: Encuentra el valor máximo en la columna.
  • COUNT: Devuelve el número de filas (registros) que cumplen la condición.

Si se necesitan consultar a la vez funciones resumen y columnas individuales, es obligatorio crear grupos mediante la cláusula GROUP BY.

Orden de Sintaxis y Ejecución

Orden de Sintaxis (Obligatorio):

SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY - LIMIT

Orden de Ejecución (Lógico):

  1. WHERE: Filtra los registros individuales.
  2. GROUP BY: Crea los grupos de registros.
  3. HAVING: Filtra los grupos creados.

Subconsultas

SELECT ( ... ) <operador> SELECT ( ... )

Las subconsultas filtran los datos de otras consultas. Estos filtros pueden aplicarse a la cláusula WHERE (para filtrar registros) o a la cláusula HAVING (para filtrar grupos).

Tipos de Subconsultas

  • Comparación: Utilizan operadores como =, >=, <=, <>, >, <. Solo pueden devolver un único valor.
  • Pertenencia a Conjunto: Utilizan el operador IN.
  • Existencia: Utilizan EXISTS (existe) o NOT EXISTS (no existe).
  • Cuantificadas: Utilizan ALL o ANY.
  • Multivalor: Devuelven múltiples columnas o múltiples filas.

Operadores Cuantificados

  • ALL: Devuelve verdadero si la condición se cumple para todos los valores devueltos por la subconsulta.
  • ANY: Devuelve verdadero si la condición se cumple para alguno de los valores devueltos por la subconsulta.

Consideraciones Importantes sobre Subconsultas

  • La subconsulta debe coincidir en el número de registros y de columnas con la consulta principal si se utiliza en el SELECT o en el FROM.
  • La cláusula HAVING se utiliza para incluir condiciones de filtro sobre los grupos, ya que WHERE no puede utilizar funciones de agregación (SUM, MAX, etc.).
  • Los nombres de columnas que aparecen en las subconsultas pueden referirse a la consulta principal (referencias externas).
  • El operador de existencia (EXISTS) filtra la consulta principal si existen filas en la subconsulta asociada.

Subconsultas Anidadas

SELECT ( SELECT ( SELECT ( ... ) ) )

Las subconsultas anidadas reflejan la potencia del lenguaje SQL estructurado, permitiendo resolver problemas complejos paso a paso.

Ejemplo: Averiguar la ciudad donde juega el jugador más alto de la NBA.

SELECT ciudad FROM equipos WHERE nombre=(SELECT nombre_equipo FROM jugadores WHERE altura=(SELECT MAX(altura) FRO

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.