1. BASE DE DATOS PARA APLICACIONES
T.S.U. LAURA HERNÁNDEZ MARTÍNEZ
TRANSACCIONES Y MANEJO DE ERRORES EN MYSQL
2. Transacciones
• Las transacciones son todas aquellas operaciones con las
cuales se da y recibe información atreves de diversas tareas.
• Una sola tarea (INSERT INTO tabla VALUES(datos); )
• Varias tareas, donde se puede utilizar SELECT, UPDATE, INSERT.
Propiedades
• Atomicidad.- Es la garantía de que todas las operaciones se
tienen que cumplir si no llegase a suceder se tienen que
deshacer los cambios.
• Consistencia.- Nos da la seguridad de que la información sea
correcta y se actualice cuando se realice una operación.
• Aislamiento.- Garantiza que cada transacción se comporte
diferente hasta que se confirme, independencia.
• Durabilidad.- Asegura que la información va a durar y estar
correcta.
3. Características
• Las transacciones generalmente se acompañar de procedimientos
almacenados cuando se trata de tomar decisiones , la estructura de
una transacción es la siguiente:
• Inicio start transaction
• Regresar ROLL BACK(la ejecución no será completada)
• Fin COMMIT
Estructura
CREATE procedure ingresar_dato (in un int)
BEGIN
start transaccion
if nu => 50 then
insert into nu2 values(nu);
endif;
COMMIT
END//
4. Errores
Pero que hacer cuando ocurre algún imprevisto durante la
transacción.
Debemos encontrar la manera de manejar ese tiempo de
errores que se lleguen a presentar, para esto es necesario
auxiliarse de los HANDLER, los cuales nos permiten tomar
decisiones sobre los errores ocurridos durante una transaccion,
si el error no es de gran peligro continuar con el procedimiento
almacenado (CONTINUE), en caso contrario salirnos del
procedimiento almacenado deshaciendo todo lo ejecutado para
asegurar una transaccion (NEXT).
5. Estructura HANDLER
Todos los errores tienen un código, del cual debemos tener conocimiento para poder
insertarlo en el hadler y conozca que hacer cuando se presente el error indicado.
create tabla_error(error_message varchar(80));
Ahora creamos el procedimiento almacenado que se encargara de introducir datos en la BD y
manejar excepciones:
delimiter // Se crea un procedimiento
create procedure procedimientoConHandler(parametro1 int) almacenado para manejar
el error
begin
declare exit handler for 1452 No. De error a manejar
begin
insert into error_log values (concat('Time: ',current_date,'.
Error de clave ajena para el valor= ', parametro1));
end;
insert into t3 values (parametro1);
.
.
.
end;
//
6. Manejo de error mediante if
• También se pueden manejar los errores con un if siguiendo la siguiente
estructura:
PROCEDURE siceem.sp_delete_alumno_trans(IN p_curp VARCHAR(18))
BEGIN
declare error int;
START TRANSACTION;
delete
from siceem_t_datos_alumno_actual
where curp=p_curp;
En esta parte es donde se
set error=(Select @error); obtiene el error
if(error>0) then
ROLLBACK;
else
COMMIT;
end if;
END
7. Tipos de errores
• Hay distintos tipos de errores y debemos saber identificar que
errores pueden provocar graves daños a nuestro sistema y
cuales podemos hacer que pasen sin que provoquen daño
alguno al sistema.
• Por ejemplo hay errores sobre creación o eliminación
incorrecta de base de datos, estos tipos de errores podríamos
omitirlos ya que en las transacciones a realizar no se
encuentra el crear o eliminar bases de datos.
• En cambio si se tratan de errores de falla de conexión o el
sistema se ha cerrado inesperadamente cuando se esta
realizado una transacción debemos cachar ese error para que
no provoque inestabilidad en nuestra base de datos.
8. Errores a considerar
Error: 1012 SQLSTATE: HY000 (ER_CANT_FIND_SYSTEM_REC)
Mensaje: No puedo leer el registro en la tabla del sistema
Error: 1016 SQLSTATE: HY000 (ER_CANT_OPEN_FILE)
Mensaje: No puedo abrir archivo: '%s' (Error: %d)
Error: 1017 SQLSTATE: HY000 (ER_FILE_NOT_FOUND)
Mensaje: No puedo encontrar archivo: '%s' (Error: %d)
Error: 1022 SQLSTATE: 23000 (ER_DUP_KEY)
Mensaje: No puedo escribir, clave duplicada en la tabla '%s'
Error: 1023 SQLSTATE: HY000 (ER_ERROR_ON_CLOSE)
Mensaje: Error en el cierre de '%s' (Error: %d)
Error: 1024 SQLSTATE: HY000 (ER_ERROR_ON_READ)
Mensaje: Error leyendo el fichero '%s' (Error: %d)
Error: 1025 SQLSTATE: HY000 (ER_ERROR_ON_RENAME)
Mensaje: Error en el renombrado de '%s' a '%s' (Error: %d)
Error: 1026 SQLSTATE: HY000 (ER_ERROR_ON_WRITE)
Mensaje: Error escribiendo el archivo '%s' (Error: %d)
Error: 1028 SQLSTATE: HY000 (ER_FILSORT_ABORT)
Mensaje: Ordenación cancelada
Error: 1042 SQLSTATE: 08S01 (ER_BAD_HOST_ERROR)
Mensaje: No puedo obtener el nombre de maquina de tu direccion
9. Conclusión
Es importante contar con la certeza y la seguridad de que las
transacciones se realicen garantizando la seguridad de y
consistencia de los datos, ya que los errores pueden provocar
grandes problemas, perdida de información , dinero , etc.