Comandos SQL Esenciales para Crear y Gestionar Bases de Datos Relacionales

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 11,86 KB

Creación de Bases de Datos

Comando para crear una nueva base de datos:

CREATE DATABASE nombre_base_datos;

Creación de Tablas (CREATE TABLE)

Comando para crear una nueva tabla dentro de una base de datos:

CREATE TABLE nombre_tabla (
  nombre_columna1 TIPO_DE_DATOS(opciones) [restricciones],
  nombre_columna2 TIPO_DE_DATOS(opciones) [restricciones],
  ...
  [restricciones_a_nivel_tabla]
);

Tipos de Datos Comunes en SQL

Datos Numéricos

  • INT o INTEGER: Números enteros.
  • FLOAT(escala, precision): Números de punto flotante (aproximados).
  • NUMERIC(escala, precision) o DECIMAL(escala, precision): Números de punto fijo (exactos).

Datos Alfanuméricos

  • CHAR(longitud): Cadenas de caracteres de longitud fija.
  • VARCHAR(longitud): Cadenas de caracteres de longitud variable (hasta la longitud especificada).
  • TEXT: Texto de longitud variable (límite depende del SGBD, ej. ~65KB en MySQL).
  • LONGTEXT: Texto de longitud variable muy grande (límite depende del SGBD, ej. ~4GB en MySQL).

Fechas y Horas

  • DATE: Almacena año, mes y día (YYYY-MM-DD).
  • DATETIME: Almacena año, mes, día, horas, minutos y segundos.
  • TIME: Almacena horas, minutos y segundos.

Tipos de Restricciones (Constraints)

Las restricciones definen reglas para los datos en una tabla.

Restricciones a Nivel de Columna

Se definen junto a la columna.

  • NULL / NOT NULL: Especifica si la columna puede contener valores nulos.
  • DEFAULT valor: Asigna un valor por defecto si no se especifica uno al insertar.
  • PRIMARY KEY: Identificador único para cada fila en la tabla (implica NOT NULL y UNIQUE).
  • FOREIGN KEY REFERENCES tabla_referenciada(columna_referenciada): Asegura la integridad referencial con otra tabla.
  • UNIQUE: Asegura que todos los valores en la columna sean diferentes.
  • CHECK (condicion): Asegura que los valores cumplan una condición específica.
  • AUTO_INCREMENT (o similar, ej. IDENTITY en SQL Server, secuencias en PostgreSQL/Oracle): Genera automáticamente un valor numérico secuencial (usualmente para claves primarias).

Restricciones a Nivel de Tabla

Se definen al final de la declaración de columnas, permitiendo aplicar restricciones a múltiples columnas.

CONSTRAINT nombre_restriccion TIPO_RESTRICCION (columna1, columna2, ...)
[REFERENCES tabla_referenciada(columna1_ref, columna2_ref, ...)]

Tipos comunes definidos a nivel de tabla:

  • PRIMARY KEY (columna1, [columna2, ...]): Para claves primarias simples o compuestas.
  • FOREIGN KEY (columna_local1, ...) REFERENCES tabla_referenciada(columna_ref1, ...): Para claves foráneas simples o compuestas.
  • UNIQUE (columna1, [columna2, ...]): Para asegurar unicidad en una o varias columnas combinadas.
  • CHECK (condicion): Para condiciones que involucran múltiples columnas.

Ejemplo de Creación de Tabla

-- Crear la base de datos si no existe
CREATE DATABASE IF NOT EXISTS ejemplo;
USE ejemplo;

-- Crear la tabla socios
CREATE TABLE socios (
  socio_no INT(4) NOT NULL, -- Se recomienda definir explícitamente NOT NULL para PK
  Apellidos VARCHAR(20) UNIQUE,
  Telefono CHAR(9) NOT NULL,
  Fecha_alta DATE DEFAULT '2012-01-01',
  Codigo_postal INT(5) CHECK (Codigo_postal BETWEEN 28000 AND 29000),
  CONSTRAINT pk_socio_no PRIMARY KEY (socio_no)
);

Restricciones Compuestas (Definidas a Nivel de Tabla)

Claves Primarias Compuestas

Se definen obligatoriamente usando la sintaxis CONSTRAINT a nivel de tabla.

CONSTRAINT pk_socio_apellido PRIMARY KEY (socio_no, apellidos)

Claves Foráneas Compuestas

Se definen obligatoriamente usando la sintaxis CONSTRAINT a nivel de tabla.

CONSTRAINT fk_dpto_proyecto FOREIGN KEY (dpto_no, proyecto) 
REFERENCES Departamentos (dpto_no, proyecto)

Restricciones UNIQUE Compuestas

Se definen obligatoriamente usando la sintaxis CONSTRAINT a nivel de tabla.

CONSTRAINT uk_apellidos_nombre UNIQUE (apellidos, nombre)

Tipos de Integridad Referencial (Acciones ON DELETE / ON UPDATE)

Estas acciones se definen en las restricciones FOREIGN KEY para especificar qué sucede en la tabla actual cuando la fila referenciada (en la tabla padre) es eliminada o modificada.

  • CASCADE: Borra o modifica las filas correspondientes en la tabla actual (hija) que contengan esa clave foránea.
  • SET NULL: Al borrar o modificar la fila referenciada, establece a NULL el valor de la clave foránea en las filas correspondientes de la tabla actual. (La columna FK debe permitir NULL).
  • SET DEFAULT: Al borrar o modificar la fila referenciada, establece el valor por defecto definido para la columna de la clave foránea en las filas correspondientes. (La columna FK debe tener un DEFAULT definido).
  • NO ACTION / RESTRICT: Impide la eliminación o modificación de la fila referenciada si existen filas dependientes en la tabla actual. (Comportamiento exacto puede variar ligeramente entre SGBD y diferir en el momento de la comprobación).

Ejemplo de Definición de Acciones Referenciales

CONSTRAINT fk_dpto_no FOREIGN KEY (dpto_no) 
REFERENCES Departamentos (dpto_no)
ON DELETE SET DEFAULT -- Asumiendo que hay un DEFAULT definido para dpto_no
ON UPDATE CASCADE;

Nota: ON DELETE se aplica a operaciones de borrado en la tabla referenciada. ON UPDATE se aplica a modificaciones de la clave primaria/única en la tabla referenciada.

Modificación de Tablas Existentes (ALTER TABLE)

Permite cambiar la estructura de una tabla ya creada.

ALTER TABLE nombre_tabla accion1, accion2, ...;

Tipos de Modificaciones Comunes

  • Añadir una columna:
    ALTER TABLE socios ADD COLUMN direccion_email VARCHAR(30);
  • Añadir una restricción:
    ALTER TABLE socios ADD CONSTRAINT uq_socio_telf UNIQUE(telefono);
  • Borrar una columna:
    ALTER TABLE socios DROP COLUMN Fecha_alta; -- Ejemplo corrigiendo el nombre de columna
  • Borrar una restricción:
    • Borrar Clave Primaria (Sintaxis varía, ejemplo MySQL):
      ALTER TABLE socios DROP PRIMARY KEY;
    • Borrar otra restricción por nombre:
      ALTER TABLE socios DROP CONSTRAINT uq_socio_telf;
    • Borrar índice/key (MySQL):
      ALTER TABLE socios DROP INDEX nombre_indice;
  • Modificar tipo o restricciones de una columna (Sintaxis varía, ejemplo MySQL MODIFY):
    ALTER TABLE socios MODIFY Apellidos VARCHAR(25) NOT NULL;
  • Modificar el nombre de una columna (Sintaxis varía, ejemplo MySQL CHANGE):
    ALTER TABLE socios CHANGE apellidos apellidos_usuario VARCHAR(25) UNIQUE;
  • Renombrar una tabla:
    ALTER TABLE socios RENAME TO socios_biblioteca;

Eliminación de Tablas (DROP TABLE)

Elimina permanentemente una tabla y todos sus datos.

DROP TABLE nombre_tabla;

Ejemplo:

DROP TABLE socios;

Manipulación de Datos (DML - Data Manipulation Language)

Insertar Datos (INSERT INTO)

Añade nuevas filas a una tabla.

INSERT INTO nombre_tabla (columna1, columna2, ...) 
VALUES (valor1, valor2, ...);

Modificar Filas (UPDATE)

Cambia los datos en filas existentes que cumplan una condición.

UPDATE nombre_tabla 
SET nombre_columna1 = 'nuevo_valor1', nombre_columna2 = nuevo_valor2 
WHERE condicion_para_encontrar_filas;

Eliminar Filas (DELETE FROM)

Borra filas de una tabla que cumplan una condición.

DELETE FROM nombre_tabla 
WHERE condicion_que_deben_cumplir_las_filas;

¡Atención! Si se omite la cláusula WHERE, se eliminarán todas las filas de la tabla.

Ejemplo:

DELETE FROM socios WHERE socio_no = 130;

Introducción a la Normalización (Ejemplo Simplificado)

La normalización es un proceso para organizar las columnas y tablas de una base de datos relacional para minimizar la redundancia de datos y mejorar la integridad.

Ejemplo de Pasos Básicos (Conceptual):

  1. Identificar la Entidad y sus Atributos Iniciales:

    Tabla inicial: Empleados(NSS, nombre, apellidos, puesto, salario, email) (Asumiendo NSS como clave primaria inicial).

  2. Primera Forma Normal (1FN): Eliminar Atributos Multivaluados.

    Si un empleado puede tener múltiples emails, email es multivaluado. Se crea una tabla separada para los emails.

    Tabla Empleados: Empleados(NSS, nombre, apellidos, puesto, salario)

    Tabla Emails: EmailsEmpleados(NSS, email) (Clave primaria compuesta por NSS y email. NSS es clave foránea a Empleados).

  3. Segunda Forma Normal (2FN): Eliminar Dependencias Parciales.

    Asegurar que todos los atributos no clave dependan completamente de la clave primaria completa. (Este paso es relevante principalmente si la tabla original tuviera clave primaria compuesta).

  4. Tercera Forma Normal (3FN): Eliminar Dependencias Transitivas.

    Si un atributo no clave depende de otro atributo no clave, se crea una tabla separada. Por ejemplo, si el salario depende del puesto, y el puesto depende del NSS (NSS -> puesto -> salario), existe una dependencia transitiva.

    Tabla Empleados: Empleados(NSS, nombre, apellidos, puesto_id) (puesto_id es clave foránea)

    Tabla Puestos: Puestos(puesto_id, nombre_puesto, salario)

    Tabla Emails: EmailsEmpleados(NSS, email)

Nota: Este es un ejemplo muy simplificado. La normalización puede involucrar formas normales más altas (BCNF, 4FN, 5FN) según la complejidad de los datos.

Entradas relacionadas: