Restricciones en SQL
Las restricciones en SQL se aplican a las tablas y columnas para garantizar la integridad de los datos.
Cristian Escalante
Última actualización: 5 de mayo de 2025
Constraints en SQL
Las restricciones en SQL se aplican a las tablas y columnas para garantizar la integridad de los datos. Existen dos caminos para definir restricciones: al crear la tabla o al modificarla.
Las restricciones más comunes son:
- NOT NULL: asegura que una columna no contenga valores nulos.
- UNIQUE: garantiza que todos los valores en una columna sean únicos.
- PRIMARY KEY: define una columna o conjunto de columnas como clave primaria, asegurando que los valores sean únicos y no nulos.
- FOREIGN KEY: establece una relación entre dos tablas, asegurando que los valores en una columna de una tabla coincidan con los valores en la clave primaria de otra tabla.
- CHECK: permite definir una condición que los valores de una columna deben cumplir.
- DEFAULT: establece un valor predeterminado para una columna si no se proporciona un valor al insertar un nuevo registro.
- INDEX: mejora el rendimiento de las consultas al crear un índice en una o más columnas.
- AUTO_INCREMENT: se utiliza en MySQL para generar automáticamente un valor único para una columna, comúnmente utilizada en claves primarias. En otras bases de datos, se utiliza
SERIAL
oIDENTITY
. - UNSIGNED: se utiliza en MySQL para definir que una columna numérica no puede contener valores negativos.
- CHARACTER SET: define el conjunto de caracteres utilizado para almacenar datos en una columna.
- COLLATE: define la forma en que se comparan y ordenan los datos en una columna, especialmente útil para datos de texto.
Ejemplos prácticos
Restricción NOT NULL
Usamos la restricción NOT NULL
para asegurarnos de que una columna no contenga valores nulos, lo que es útil para campos obligatorios. Por ejemplo, al crear una tabla de empleados, podemos asegurarnos de que el nombre y el salario no sean nulos:
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
salario DECIMAL(10, 2) NOT NULL
);
Restricción UNIQUE
Usamos la restricción UNIQUE
para garantizar que todos los valores en una columna sean únicos. Por ejemplo, al crear una tabla de usuarios, podemos asegurarnos de que el correo electrónico sea único:
CREATE TABLE usuarios (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
correo VARCHAR(100) UNIQUE NOT NULL
);
Restricción PRIMARY KEY
La restricción PRIMARY KEY
se utiliza para definir una columna o conjunto de columnas como clave primaria, asegurando que los valores sean únicos y no nulos. Por ejemplo, al crear una tabla de productos, podemos definir el ID del producto como clave primaria:
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
precio DECIMAL(10, 2) NOT NULL
);
Restricción FOREIGN KEY
La restricción FOREIGN KEY
establece una relación entre dos tablas, asegurando que los valores en una columna de una tabla coincidan con los valores en la clave primaria de otra tabla. Por ejemplo, al crear una tabla de pedidos, podemos relacionar el ID del cliente con la tabla de clientes:
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL
);
CREATE TABLE cuentas (
id INT PRIMARY KEY,
cliente_id INT,
saldo DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);
Restricción CHECK
La restricción CHECK
permite definir una condición que los valores de una columna deben cumplir. Por ejemplo, al crear una tabla de productos, podemos asegurarnos de que el precio sea mayor que cero:
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
precio DECIMAL(10, 2) CHECK (precio > 0) NOT NULL
);
Restricción DEFAULT
La restricción DEFAULT
establece un valor predeterminado para una columna si no se proporciona un valor al insertar un nuevo registro. Por ejemplo, al crear una tabla de empleados, podemos establecer un salario predeterminado:
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
salario DECIMAL(10, 2) DEFAULT 30000.00 NOT NULL
);
Restricción INDEX
La restricción INDEX
mejora el rendimiento de las consultas al crear un índice en una o más columnas. Por ejemplo, al crear una tabla de productos, podemos crear un índice en la columna nombre:
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
precio DECIMAL(10, 2) NOT NULL,
INDEX (nombre)
);
Restricción AUTOINCREMENT
La restricción AUTOINCREMENT
se utiliza en MySQL para generar automáticamente un valor único para una columna, comúnmente utilizada en claves primarias. Por ejemplo, al crear una tabla de empleados, podemos definir el ID del empleado como autoincremental:
CREATE TABLE empleados (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
salario DECIMAL(10, 2) NOT NULL
);
Restricción UNSIGNED
La restricción UNSIGNED
se utiliza en MySQL para definir que una columna numérica no puede contener valores negativos. Por ejemplo, al crear una tabla de productos, podemos definir el precio como unsigned:
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
precio DECIMAL(10, 2) UNSIGNED NOT NULL
);
Restricción CHARACTER SET
La restricción CHARACTER SET
define el conjunto de caracteres utilizado para almacenar datos en una columna. Por ejemplo, al crear una tabla de usuarios, podemos definir el conjunto de caracteres como UTF-8:
CREATE TABLE usuarios (
id INT PRIMARY KEY,
nombre VARCHAR(50) CHARACTER SET utf8 NOT NULL,
correo VARCHAR(100) NOT NULL
);
Restricción COLLATE
La restricción COLLATE
define la forma en que se comparan y ordenan los datos en una columna, especialmente útil para datos de texto. Por ejemplo, al crear una tabla de productos, podemos definir el collation como case insensitive:
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(50) COLLATE utf8_general_ci NOT NULL,
precio DECIMAL(10, 2) NOT NULL,
INDEX (nombre)
);