Para los informaticos programadores que trabajan con bases de datos Mysql, les he traido un ejemplo de como hacer una transaccion utilizando la base de datos Mysql con Procedimientos Almacenados o (Store Procedures).
Las transacciones son un conjunto de operaciones que se encargan de hacer que nuestra informacion se haga de forma segura, un ejemplo claro seria de que el usuario A esta depositando un dinero al usuario B pero que pasa si cuando esta depositando cierto dinero la conexion del servidor cae entonces la pregunta seria ¿Que paso se logro transferir ese dinero ? pues la respuesta es No.¿ Porque no? porque al momento de que se esta haciendo la transaccion hay una funcion que se encarga de deshacer los cambios, ahora porque que motivo se creo esta funcion porque cuando una transaccion no se realiza correctamente o no termino su trabajo inmediatamente deshace los cambios. esta funcion se llama ROLLBACK.
AHORA VEREMOS UN EJEMPLO DE TRANSACCIONES EN MYSQL CON PROCEDIMIENTOS ALMACENADOS Y FUNCIONES DE TRANSACCION.
Nota antes de empezar a crear las tablas tienen que saber que para hacer transacciones necesitamos que las tablas sean de tipo InnoDB si no ponen el tipo, mysql va a entender que es MyIsam con este tipo de tabla no funcionara la transaccion asi que mucho cuidado al momento de crear sus tablas.
Vamos a crear una base de datos en Mysql .
CREATE DATABASE colegio;
USE colegio;
CREATE TABLE alumno(
idalumno char(3) primary key,
paterno varchar(20),
materno varchar(20),
nombre varchar(20)
);
Ahora vamos a crear un procedimiento almacenado para insertar alumnos.
CREATE PROCEDURE ejemplo3(c char(3), p varchar(20), m varchar(20), n varchar(20))
BEGIN
DECLARE error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SET error=1;
Select “errorrrrrrrr”;
END;
insert into alumno values (c,p,m,n) ;
IF error=1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END//
Explicacion
Usando condition handlers. Se debe definir un handler para cada tipo de excepción que se quiera manejar, usando el número del error que se quiere interceptar, o las condiciones SQLEXCEPTION, SQLWARNING y NOT FOUND
Para esto declaramos una variable numérica...
Para esto declaramos una variable numérica...
DECLARE error INTEGER DEFAULT 0;
Declaramos el handler que se ejecutará en caso de un SQLEXCEPTION. el handler puede ser de tipo EXIT (sale del procedure) o CONTINUE ) DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN
SET error=1;
END;
INICIA LA TRANSACTION
insert into ejemplo(nombre, apellidos) values (´Alain´, ´ramos´)
si SQL lanza alguna excepcion el valor de error ya no será 0
IF error=0 THEN
ROLLBACK
ELSE
COMMIT
END IF
Listo ya esta es cuestion de probar nada mas espero que les haya podido ayudar para cualquier duda dejar su comentario.
2 comentarios:
tengo un problema, por mas que lo intento no me introduce los datos en la tabla, no se si podrías ayudarme.
este es mi codigo
delimiter //
CREATE PROCEDURE ejemplo3(c char(3), p varchar(20), m varchar(20), n
varchar(20))
BEGIN
DECLARE error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER
FOR SQLEXCEPTION
BEGIN
SET error=1;
Select “errorrrrrrrr”;
END;
INSERT INTO clientes (NomCliente,ApeCliente,CalleCliente,ColCliente,TelCliente,EmailCliente,SexoCliente)
VALUES ('Jerman','Pèrez Gonzales','Diamante 207','Matatipac','133123123123','j123494@gmail.com','Masculino');
IF error=1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END//
Inicializa la variable a 0 antes de las instrucciones.
SET error=0;
Prohbablemente también te haga falta START TRANSACTION Y COMMIT, AL FINAL
Publicar un comentario