Triggers Ejemplo Claro

17
Comit Rollback y Trigers Presentado por: Ricardo Arturo Torres Juan Jacobo Tibaquira Alejandro Vinasco Ardila

description

como realizar triggers en mysql

Transcript of Triggers Ejemplo Claro

  • Comit Rollback y Trigers

    Presentado por:

    Ricardo Arturo Torres

    Juan Jacobo Tibaquira

    Alejandro Vinasco Ardila

  • Commit y Rollback

    Por defecto, MySQL se ejecuta con el modo autocommitactivado. Esto significa que en cuanto ejecute un comandoque actualice (modifique) una tabla, MySQL almacena laactualizacin en disco.

    Si usa tablas transaccionales (como InnoDB o BDB),puede desactivar el modo autocommit con el siguientecomando:

    SET AUTOCOMMIT=0;

    Tras deshabilitar el modo autocommit poniendo la variableAUTOCOMMIT a cero, debe usar COMMIT para almacenarlos cambios en disco o ROLLBACK si quiere ignorar loscambios hechos desde el comienzo de la transaccin.

  • Ejemplos:

    START TRANSACTION:

    START TRANSACTION;

    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;

    UPDATE table2 SET summary=@A WHERE type=1;

    COMMIT

    Con START TRANSACTION, autocommit permanecedeshabilitado hasta el final de la transaccin con COMMIT oROLLBACK. El modo autocommit vuelve a su estado prvio.

  • START TRANSACTION WITH CONSISTENTSNAPSHOT;

    La clusula WITH CONSISTENT SNAPSHOTcomienza una lectura consistente paramotores de almacenamiento capaces de ello.Actualmente, esto se aplica slo a InnoDB. Elefecto es el mismo que realizar un STARTTRANSACTION seguido por un SELECTdesde cualquier tabla InnoDB.

    Comenzar una transaccin provoca que serealice un UNLOCK TABLES implcito.

  • Tenga en cuenta que si no usa tablastransaccionales, cualquier cambio se almacenade golpe, a pesar del estado del modoautocommit.

    Si realiza un comando ROLLBACK tras actualizaruna tabla no transaccional dentro de unatransaccin, ocurre una advertenciaER_WARNING_NOT_COMPLETE_ROLLBACK.

    Los cambios en tablas transaccionales sedeshacen, pero no los cambios en tablas notransaccionales.

  • Cada transaccin se almacena en el log binario en untrozo, hasta COMMIT. Las transacciones que sedeshacen no se loguean. (Excecin: Las modificacionesa tablas no transaccionales no pueden deshacerse. Siuna transaccin que se deshace incluye modificacionesa tablas no transaccionales, la transaccin entera seloguea con un comando ROLLBACK al final paraasegurar que las modificaciones a estas tablas sereplican.) El registro binario (Binary Log).

    Puede cambiar el nivel de aislamiento para transaccionescon SET TRANSACTION ISOLATION LEVEL.

  • Sintaxis de SET TRANSACTION.

    Deshacer puede ser una operacin lenta que puede ocurrir sinque el usuario lo haya pedido explcitamente (por ejemplo,cuando ocurre un error). Debido a ello, SHOWPROCESSLIST en MySQL 5.0 muestra Rolling back en lacolumna Statepara la conexin durante rollbacks implcitos yexplcitos (comando SQL ROLLBACK).

    sta es una traduccin del manual de referencia de MySQL,que puede encontrarse en dev.mysql.com

  • Procedimiento de almacenado

    Son funcionalidades nuevas apertir de laversion 5.0 de MySQL

    Es un conjunto de comandos SQL que puedenalmacenarse en el servidor.

    Los clientes ya no necesitan relanzar loscomandos individuales.

  • Procesos de almacenado

    Se usan cuando multiples aplicaciones cliente funcionan en distintas plataformas, o estan

    escritas en distintos lenguajes.

    Cuando la seguridad es muy importante.

  • Los procesos de almacenados pueden enviar menos informacion entre el servidor y el cliente.

    Procesos de almacenado

  • Triggers o Disparadores

    Otra de las nuevas caractersticas incluidas enMySQL, adems de los procedimientosalmacenados, son los triggers, son escuchas,que se mantienen alerta a los eventos quepuedan producirse en una tabla (insert , updatey delete) y ejecutan un cdigo antes (before) odespus (after) de que se produzca esteevento.

  • Sintaxis de los triggers

    CREATE TRIGGER {BEFORE|AFTER}

    {INSERT|UPDATE|DELETE}ON

    FOR EACH ROW

    BEGIN

    END;

  • Ejemplo

    Crearemos la tabla de clientes y le ponemosalgunos registros:

    CREATE TABLE clientes(id int not null auto_increment,nombre varchar(100),seccion varchar(10),PRIMARY KEY(id),KEY(nombre)

    ) ENGINE = InnoDB;

  • INSERT INTO clientes (nombre, seccion) VALUES

    ('Miguel','informatica'),('Rosa','comida'),('Maria','ropa'),

    ('Albert','informatica'),('Jordi','comida');

  • Y una tabla que ser la que guardar los datos de la "auditoria"

    CREATE TABLE auditoria_clientes(

    id int not null auto_increment,nombre varchar(100),

    anterior_seccion varchar(10),usuario varchar(40),modificado datetime,

    primary key(id)) ENGINE = InnoDB;

  • y finalmente un trigger que se disparar cada vez que alguien modifique un dato de la tabla

    clientes y lo guardar en una tabla junto al nombre del usuario y la fecha.

    CREATE TRIGGER trigger_auditoria_clientes AFTER UPDATE ON clientes

    FOR EACH ROWINSERT INTO auditoria_clientes(name, anterior_seccion, usuario, modificado )

    VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() );

  • Gracias

    por la Atencion

    Prestada