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
NULLel valor de la clave secundaria cuando se elimina o modifica el registro en la tabla principal (solo si la columna secundaria acepta valoresNULL). - 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 especificaNOT 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 - LIMITOrden de Ejecución (Lógico):
- WHERE: Filtra los registros individuales.
- GROUP BY: Crea los grupos de registros.
- 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) oNOT EXISTS(no existe). - Cuantificadas: Utilizan
ALLoANY. - 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
SELECTo en elFROM. - La cláusula
HAVINGse utiliza para incluir condiciones de filtro sobre los grupos, ya queWHEREno 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 