1. TSU. Alberto Rodríguez Vargas
ING. Tecnologías de la
Información y Comunicación
8vo Cuatrimestre.
Bases de Datos para
Aplicaciones
TRANSACCIONES
Y
MANEJO DE
ERRORES EN
MYSQL
2. Hay situaciones en las que necesitamos hacer mas de una consulta
al mismo tiempo y todas tienen que ser correctas para que los datos
sean consistentes y tengan sentido, de otro modo habría información
colgada y desvinculada. En el mayor de los casos esto provocaría
desperdicio de espacio en la base de datos o lo mas probable es
que cause errores a la hora de a la hora de ejecutarse.
3. Pasos para usar una transacción
1. La transacción se inicia con la sentencia BEGIN.
2. Sentencias que actualizan, insertan, o eliminan datos en la base de
datos.
3. Si se confirman los cambios a la base de datos se hace mediante la
sentencia COMMIT. Únicamente cuando esta sentencia es procesada
por mysql los cambios en la base de datos son modificados
permanentemente.
4. Si sucede algun error en la transacción, se puede hacer uso de la
sentencia ROLLBACK, para deshacer los cambios que han sido
realizados en las consultas ejecutadas.
5. La sentencia DECLARE…HANDLER especifica un controlador que se
ocupa de una o mas condiciones. Si una de estas condiciones
ocurre, se ejecuta el comando especificado que puede ser una
simple sentencia como SET var_name=value o una sentencia
compuesta usando BEGIN Y END.
ACCIONES HANDLER
CONTINUE: Continua la ejecución del programa actual.
EXIT: Termina la ejecución del BEGIN…END compuesto de sentencias
en los cuales el handler o controlador es declarado. Esto es
verdadero incluso si la condición ocurre en un bloque interno.
UNDO: No soportado, pero es lo mismo que la sentencia ROLLBACK.
6. EJEMPLO
CREATE PROCEDURE p ()
BEGIN
DECLARE i INT DEFAULT 3;
retry:
REPEAT
BEGIN
DECLARE CONTINUE HANDLER FOR SQLWARNING
BEGIN
ITERATE retry; # illegal
END;
IF i < 0 THEN
LEAVE retry; # legal
END IF;
SET i = i - 1;
END;
UNTIL FALSE END REPEAT;
END;
7. El alcance de un bloque de etiquetas no incluye el código para los
controladores declarados dentro del bloque. Por lo tanto, la
declaración asociada con un controlador no puede utilizar ITERATE o
licencia para referirse a las etiquetas para los bloques que encierran
la declaración del controlador. Considere el ejemplo anterior, donde
el bloque de repetición tiene una etiqueta de reintento.