Untitled
unknown
mysql
a year ago
2.9 kB
6
Indexable
-- 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;
Editor is loading...
Leave a Comment