Fundamentos de Administración y Programación en Bases de Datos SQL

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,68 KB

Administración y Programación Esencial en Bases de Datos SQL

Gestión de Usuarios

Para crear un nuevo usuario en el sistema, se utiliza el siguiente comando:

CREATE USER 'nombre_usuario'@'localhost' IDENTIFIED BY 'contraseña';

Manejo de Transacciones

Las transacciones aseguran la integridad de los datos al agrupar múltiples operaciones (como actualizaciones e inserciones) en una sola unidad lógica. Si alguna parte falla, todas las operaciones se revierten (rollback).

Ejemplo 1: Retiro Simple

Una secuencia básica de retiro:

START TRANSACTION;
UPDATE cuenta SET saldo = saldo - 100 WHERE id = 1;
INSERT INTO registro_transacciones (cuenta_id, monto, tipo) VALUES (1, 100, 'retiro');
COMMIT;

Ejemplo 2: Transferencia entre Cuentas

Una transferencia requiere modificar al menos dos cuentas:

START TRANSACTION;
-- Actualizar saldo de cuenta origen
UPDATE cuenta SET saldo = saldo - 100 WHERE id = 1;
-- Registrar la transacción
INSERT INTO registro_transacciones (cuenta_id, monto, tipo) VALUES (1, -100, 'transferencia_saliente');
-- Actualizar saldo de cuenta destino (Nota: El código original estaba incompleto aquí)
UPDATE cuenta SET saldo = saldo + 100 WHERE id = [ID_DESTINO];
COMMIT;

Ejemplo 3: Actualización de Pedido (Usando BEGIN TRANSACTION)

Aunque MySQL prefiere START TRANSACTION, BEGIN TRANSACTION es sintácticamente válido en muchos dialectos SQL:

BEGIN TRANSACTION;
-- Actualizar estado del pedido a "enviado"
UPDATE pedido SET estado = 'enviado' WHERE id = 123;
-- Registrar la acción en el registro de pedidos
INSERT INTO registro_pedido (pedido_id, accion, fecha) VALUES (123, 'enviado', GETDATE());
COMMIT;

Motores de Almacenamiento

La elección del motor afecta el rendimiento, la concurrencia y las características de integridad de la tabla.

InnoDB

InnoDB es el motor de almacenamiento por defecto en MySQL. Soporta transacciones ACID y claves foráneas.

Creación de tabla usando InnoDB:

CREATE TABLE usuarios_innodb (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50),
    edad INT,
    email VARCHAR(100)
) ENGINE=InnoDB;

MyISAM (ISAM)

MyISAM (anteriormente ISAM) es conocido por ser más rápido en operaciones de lectura pura, pero no soporta transacciones ni integridad referencial.

Creación de tabla usando MyISAM:

CREATE TABLE usuarios_isam (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50),
    edad INT,
    email VARCHAR(100)
) ENGINE=MyISAM;

Procedimientos Almacenados

Los procedimientos almacenados encapsulan lógica de negocio directamente en la base de datos, mejorando la seguridad y el rendimiento.

Definición de Procedimientos

Se requiere cambiar el delimitador para definir procedimientos que contienen punto y coma internos:

DELIMITER //
CREATE PROCEDURE obtener_usuario_por_id (IN usuario_id INT)
BEGIN
    SELECT * FROM usuarios WHERE id = usuario_id;
END //
DELIMITER ;
Ejemplos de Procedimientos
  • Consulta de Ventas Mensuales:
    CREATE PROCEDURE obtener_ventas_por_mes ()
    BEGIN
        SELECT MONTH(fecha_venta) AS mes, SUM(total) AS total_ventas
        FROM ventas
        GROUP BY MONTH(fecha_venta);
    END;
  • Eliminación con Transacción:
    CREATE PROCEDURE eliminar_usuario_con_pedidos (IN usuario_id INT)
    BEGIN
        START TRANSACTION;
        DELETE FROM pedidos WHERE usuario_id = usuario_id;
        DELETE FROM usuarios WHERE id = usuario_id;
        COMMIT;
    END;
  • Cálculo de Promedio:
    CREATE PROCEDURE calcular_promedio_edad ()
    BEGIN
        SELECT AVG(edad) AS promedio_edad FROM usuarios;
    END;
  • Conteo de Usuarios (con delimitador):
    DELIMITER //
    CREATE PROCEDURE obtener_cantidad_usuarios ()
    BEGIN
        SELECT COUNT(*) AS cantidad_usuarios FROM usuarios;
    END //
    DELIMITER ;

Permisos y Seguridad

La gestión de permisos es crucial para controlar qué acciones pueden realizar los usuarios sobre los objetos de la base de datos.

Comandos de Permisos (GRANT)

Los permisos básicos incluyen:

  • SELECT: Permite al usuario ver los datos de una tabla o vista.
  • INSERT: Permite al usuario agregar nuevos registros a una tabla.
  • UPDATE: Permite al usuario modificar registros existentes en una tabla.

Asignación de permisos a un rol:

CREATE ROLE rol_aplicacion;
GRANT SELECT, INSERT, UPDATE ON tabla_ejemplo TO rol_aplicacion;

Funciones y Permisos Condicionales

Se pueden definir funciones para implementar lógica de autorización más compleja, aunque la sintaxis de GRANT condicional varía significativamente entre sistemas de gestión de bases de datos (SGBD).

Definición de una función (ejemplo conceptual):

CREATE FUNCTION es_administrador(usuario_id INT) RETURNS BOOLEAN AS
BEGIN
    DECLARE es_admin BOOLEAN;
    -- Lógica para determinar si el usuario es administrador
    RETURN es_admin;
END;

Intento de aplicar un permiso condicional (sintaxis específica de algunos SGBD):

GRANT SELECT ON tabla_ejemplo TO usuario;
GRANT INSERT, UPDATE, DELETE ON tabla_ejemplo TO usuario WHERE es_administrador(usuario.id) = TRUE;

Entradas relacionadas: