Untitled

mail@pastecode.io avatar
unknown
mysql
13 days ago
2.9 kB
1
Indexable
Never
-- Crear la tabla Enfermera
CREATE TABLE Enfermera (
    id_enfermera INT AUTO_INCREMENT,
    nombres VARCHAR(100),
    apellidos VARCHAR(100),
    codigo_enfermera VARCHAR(50),
    direccion VARCHAR(255),
    edad INT,
    genero ENUM('M', 'F'),
    documento_identificacion VARCHAR(50),
    telefono VARCHAR(20),
    cargo VARCHAR(50),
    email VARCHAR(100),
    PRIMARY KEY (id_enfermera)
);

-- Crear el procedimiento almacenado para insertar 10,000 datos
-- agrege transaction por si fallaba al hacer los insert
DELIMITER $$

CREATE PROCEDURE InsertarEnfermeras()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE exitHandler INT DEFAULT 0;

    -- Declaramos un manejador de errores para capturar cualquier problema
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
        -- En caso de error, hacemos un rollback y terminamos
ROLLBACK;
SET exitHandler = 1;
END;

    -- Iniciamos la transacción después de declarar los handlers
START TRANSACTION;

-- Bucle para insertar 10,000 enfermeras
WHILE i <= 10000 DO
        INSERT INTO Enfermera (nombres, apellidos, codigo_enfermera, direccion, edad, genero, documento_identificacion, telefono, cargo, email)
        VALUES (
            CONCAT('Nombre', i),
            CONCAT('Apellido', i),
            CONCAT('COD-', LPAD(i, 5, '0')),
            CONCAT('Direccion ', i),
            FLOOR(20 + (RAND() * 40)),  -- Edad aleatoria entre 20 y 60
            IF(RAND() > 0.5, 'F', 'M'), -- Genero aleatorio
            CONCAT('DOC-', LPAD(i, 6, '0')),
            CONCAT('555-555-', LPAD(i, 4, '0')),
            'Enfermera',
            CONCAT('email', i, '@example.com')
        );
        
        SET i = i + 1;
END WHILE;

    -- Si no hubo errores, hacemos un commit
    IF exitHandler = 0 THEN
        COMMIT;
END IF;

END$$

DELIMITER ;

CALL InsertarEnfermeras();
SELECT count(*) as total_registros FROM hospital.enfermera;

-- Agregar una restricción "Primary key" sobre el campo id_enfermera
-- Esto ya lo hemos hecho en el paso 1 al definir PRIMARY KEY (id_enfermera) en la creación de la tabla. Si queremos verificar que la clave primaria fue creada correctamente:
SHOW INDEXES FROM Enfermera WHERE Key_name = 'PRIMARY';

-- Crear índices en los atributos necesarios
CREATE INDEX idx_documento_identificacion ON Enfermera (documento_identificacion);
CREATE INDEX idx_telefono ON Enfermera (telefono);
CREATE INDEX idx_email ON Enfermera (email);

-- Crear un índice compuesto sobre los campos "nombres" y "apellidos"
CREATE INDEX idx_nombres_apellidos ON Enfermera (nombres, apellidos);

--  Crear un índice compuesto sobre tres campos en la tabla Enfermera
CREATE INDEX idx_edad_genero_cargo ON Enfermera (edad, genero, cargo);

-- Listar todos los índices de la tabla Enfermera
SHOW INDEXES FROM Enfermera;
Leave a Comment