sábado, 12 de noviembre de 2011

Transacciones en Mysql

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...

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:

Unknown dijo...

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//

JUAN GABRIEL CASTILLO dijo...

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

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best WordPress Themes