Lenguaje de Definición de Datos (DDL) Restricciones 2/3
1. Qué son las Restricciones (Constraints)? #
Las restricciones en SQL son reglas que se aplican a las columnas o tablas para asegurar la integridad de los datos. Estas reglas garantizan que los datos sean válidos y consistentes, y pueden ayudar a prevenir errores durante la inserción, actualización o eliminación de registros.
Las restricciones más comunes son:
PRIMARY KEYFOREIGN KEYUNIQUENOT NULLCHECK
2. Comandos para trabajar con Restricciones #
En SQL, puedes definir restricciones tanto al momento de crear una tabla como después, mediante el uso de comandos como CREATE TABLE y ALTER TABLE.
Restricciones más comunes #
PRIMARY KEY #
La clave primaria (PRIMARY KEY) es una restricción que asegura que los valores de una columna o un conjunto de columnas sean únicos y no nulos. Una tabla solo puede tener una clave primaria.
Sintaxis básica:
1CREATE TABLE tabla ( 2 columna1 tipo_de_dato, 3 columna2 tipo_de_dato, 4 PRIMARY KEY (columna1) 5);
Ejemplo:
1CREATE TABLE estudiantes ( 2 id INT, 3 nombre VARCHAR(50), 4 edad INT, 5 PRIMARY KEY (id) 6);
En este ejemplo, la columna id de la tabla estudiantes es la clave primaria. Esto significa que no puede haber dos estudiantes con el mismo id y no puede ser nulo.
FOREIGN KEY #
Una clave foránea (FOREIGN KEY) es una restricción que asegura que los valores de una columna coincidan con los valores de la clave primaria en otra tabla. Esto establece una relación entre dos tablas.
Sintaxis básica:
1CREATE TABLE tabla ( 2 columna1 tipo_de_dato, 3 columna2 tipo_de_dato, 4 FOREIGN KEY (columna1) REFERENCES otra_tabla (columna_en_otra_tabla) 5);
Ejemplo:
En este ejemplo, la columna estudiante_id en la tabla inscripciones es una clave foránea que hace referencia a la columna id en la tabla estudiantes. Esto asegura que solo se pueda insertar un estudiante_id que exista en la tabla estudiantes.
UNIQUE #
La restricción UNIQUE asegura que los valores de una columna sean únicos, es decir, que no se repitan. A diferencia de la clave primaria, una columna puede tener valores nulos con la restricción UNIQUE.
Sintaxis básica:
1CREATE TABLE tabla ( 2 columna tipo_de_dato, 3 UNIQUE (columna) 4);
Ejemplo:
En este ejemplo, la columna email tiene la restricción UNIQUE, lo que significa que no puede haber dos empleados con el mismo correo electrónico.
NOT NULL #
La restricción NOT NULL asegura que una columna no pueda contener valores nulos. Es útil para garantizar que los datos importantes sean siempre proporcionados.
Sintaxis básica:
1CREATE TABLE tabla ( 2 columna tipo_de_dato NOT NULL 3);
Ejemplo:
En este ejemplo, las columnas nombre y precio no pueden contener valores nulos, lo que garantiza que siempre haya un nombre y un precio para cada producto.
CHECK #
La restricción CHECK permite imponer una condición para los valores de una columna. Solo se permiten los valores que cumplen con esta condición.
Sintaxis básica:
1CREATE TABLE tabla ( 2 columna tipo_de_dato, 3 CHECK (condición) 4);
Ejemplo:
En este ejemplo, la restricción CHECK asegura que el salario de un empleado siempre sea mayor a 0. Si intentamos insertar un valor negativo, obtendremos un error.
DEFAULT #
La palabra clave DEFAULT en SQL se utiliza para establecer un valor predeterminado para una columna cuando no se proporciona un valor específico al insertar un nuevo registro. Si un valor no se inserta explícitamente en esa columna, el valor predeterminado especificado será utilizado.
3. Sintaxis básica: #
1CREATE TABLE nombre_tabla ( 2 columna1 tipo_dato DEFAULT valor_por_defecto, 3 columna2 tipo_dato, 4 ... 5);
4. Ejemplo: #
Supongamos que tienes una tabla estudiantes y quieres que la columna clase tenga el valor predeterminado "General" si no se especifica otro valor al insertar un nuevo estudiante.
5. Inserción con valor predeterminado: #
Si insertas un nuevo registro sin especificar la columna clase, se usará el valor "General":
1INSERT INTO estudiantes (id, nombre) 2VALUES (1, 'Juan');
El registro será:
id: 1nombre: Juanclase: General (por defecto)
6. Usos comunes: #
- Proporcionar valores por defecto: Simplifica las inserciones cuando hay un valor común que se aplica en la mayoría de los casos.
- Asegurar consistencia: Garantiza que cada fila tenga un valor en ciertas columnas, incluso si no se proporciona explícitamente.
7. Modificación de una columna para agregar un valor predeterminado: #
Si necesitas agregar un valor predeterminado a una columna existente, puedes usar el comando ALTER TABLE:
AUTOINCREMENT #
El AUTO_INCREMENT es una propiedad utilizada en bases de datos, principalmente en sistemas como MySQL, que permite que el valor de una columna numérica se incremente automáticamente cada vez que se inserta un nuevo registro. Generalmente se usa en columnas de tipo clave primaria para generar un identificador único para cada registro.
8. Cómo funciona? #
Cuando se define una columna con AUTO_INCREMENT, no es necesario que el usuario proporcione un valor para esa columna al insertar un nuevo registro. El sistema asignará automáticamente el siguiente valor disponible, generalmente comenzando desde 1 y aumentando en 1 con cada nueva fila agregada.
9. Sintaxis: #
En este ejemplo:
- La columna
idtiene la propiedadAUTO_INCREMENT. - Cada vez que se inserte un nuevo registro, el valor de
idse incrementará automáticamente.
10. Ejemplo de inserción de datos: #
1INSERT INTO nombre_tabla (nombre) 2VALUES ('Juan');
En este caso, no es necesario especificar un valor para la columna id, ya que AUTO_INCREMENT se encargará de asignar el valor de id automáticamente.
11. Características: #
- Único por fila: Cada valor asignado por
AUTO_INCREMENTes único dentro de la columna. - Incremento automático: El valor se incrementa de forma secuencial (por defecto, de 1 en 1).
- Valor inicial: Generalmente empieza en 1, pero puedes configurar un valor inicial diferente.
12. Cómo cambiar el valor inicial? #
En MySQL, puedes establecer un valor inicial para una columna AUTO_INCREMENT con la siguiente consulta:
Esto hará que la siguiente inserción utilice el valor 100 para la columna AUTO_INCREMENT.
ADD CONSTRAINT Agregar Restricciones a Tablas Existentes #
Si ya tienes una tabla y deseas agregar una restricción, puedes usar el comando ALTER TABLE.
Sintaxis básica:
1ALTER TABLE tabla 2ADD CONSTRAINT nombre_restricción 3tipo_restricción (columna);
Ejemplo:
1ALTER TABLE estudiantes 2ADD CONSTRAINT unique_email UNIQUE (email);
Este comando agrega una restricción UNIQUE a la columna email de la tabla estudiantes.
13. Comando DROP CONSTRAINT #
Si necesitas eliminar una restricción de una tabla (como una clave primaria o una clave foránea), puedes usar el comando DROP CONSTRAINT.
Sintaxis básica:
Ejemplo:
Para eliminar una clave foránea de la tabla cursos:
14. Resumen #
Las restricciones son fundamentales para asegurar la calidad e integridad de los datos en una base de datos. Las restricciones más comunes incluyen:
PRIMARY KEY: Garantiza que los valores sean únicos y no nulos.FOREIGN KEY: Establece relaciones entre tablas y asegura la integridad referencial.UNIQUE: Asegura que los valores en una columna sean únicos.NOT NULL: Garantiza que una columna no pueda tener valores nulos.CHECK: Define condiciones específicas para los valores de una columna.DEFAULT: Asigna un valor predeterminado a una columna.AUTO_INCREMENT: permite que el valor de una columna numérica se incremente automáticamente.ADD CONSTRAINT: Agregar una restricción a una tabla existente.DROP CONSTRAINT: Eliminar una restricción de una tabla.
Estas restricciones ayudan a mantener la base de datos organizada, consistente y libre de datos incorrectos.
Resumen del tema
Conceptos clave #
- Restricciones de Integridad (Constraints): reglas impuestas en columnas o tablas para garantizar que solo se almacenen datos válidos.
PRIMARY KEY: identificador único de fila (combinación implícita deUNIQUEyNOT NULL).FOREIGN KEY(Integridad Referencial): vincula una columna con la clave primaria de otra tabla (ON DELETE / ON UPDATE CASCADE,SET NULL,RESTRICT).UNIQUEvs.NOT NULL:UNIQUEprohíbe duplicados (pero puede admitir unNULL), mientras queNOT NULLexige obligatoriedad.CHECK: valida expresiones lógicas en la inserción o modificación (ej.precio > 0oedad >= 18).DEFAULT: asigna un valor por omisión cuando no se proporciona explícitamente en elINSERT.- Gestión de Constraints:
ALTER TABLE ... ADD CONSTRAINTyALTER TABLE ... DROP CONSTRAINT(con variaciones según motor).
Qué debes recordar #
Las restricciones delegan la validación de integridad directamente en el motor de base de datos, evitando que datos erróneos o huérfanos se guarden en las tablas.