Commit y rollback

16,740 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
16,740
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
228
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Commit y rollback

  1. 1. Comit Rollback y Trigers Presentado por: Ricardo Arturo Torres Juan Jacobo Tibaquira Alejandro Vinasco Ardila
  2. 2. Commit y RollbackPor defecto, MySQL se ejecuta con el modo autocommitactivado. Esto significa que en cuanto ejecute un comandoque actualice (modifique) una tabla, MySQL almacena laactualización 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 almacenar los cambios en disco o ROLLBACK si quiere ignorar loscambios hechos desde el comienzo de la transacción.
  3. 3. Ejemplos: START TRANSACTION:START TRANSACTION;SELECT @A:=SUM(salary) FROM table1 WHERE type=1;UPDATE table2 SET summary=@A WHERE type=1;COMMITCon START TRANSACTION, autocommit permanece deshabilitado hasta el final de la transacción con COMMIT o ROLLBACK. El modo autocommit vuelve a su estado prévio.
  4. 4. START TRANSACTION WITH CONSISTENT SNAPSHOT;La cláusula WITH CONSISTENT SNAPSHOT comienza una lectura consistente para motores de almacenamiento capaces de ello. Actualmente, esto se aplica sólo a InnoDB. El efecto es el mismo que realizar un START TRANSACTION seguido por un SELECT desde cualquier tabla InnoDB.Comenzar una transacción provoca que se realice un UNLOCK TABLES implícito.
  5. 5. Tenga en cuenta que si no usa tablas transaccionales, cualquier cambio se almacena de golpe, a pesar del estado del modo autocommit.Si realiza un comando ROLLBACK tras actualizar una tabla no transaccional dentro de una transacción, ocurre una advertencia ER_WARNING_NOT_COMPLETE_ROLLBAC K.Los cambios en tablas transaccionales se deshacen, pero no los cambios en tablas no transaccionales.
  6. 6. Cada transacción se almacena en el log binario en un trozo, hasta COMMIT. Las transacciones que se deshacen no se loguean. (Exceción: Las modificaciones a tablas no transaccionales no pueden deshacerse. Si una transacción que se deshace incluye modificaciones a tablas no transaccionales, la transacción entera se loguea con un comando ROLLBACK al final para asegurar que las modificaciones a estas tablas se replican.) “El registro binario (Binary Log)”.Puede cambiar el nivel de aislamiento para transacciones con SET TRANSACTION ISOLATION LEVEL.
  7. 7. “Sintaxis de SET TRANSACTION”.Deshacer puede ser una operación lenta que puede ocurrir sin que el usuario lo haya pedido explícitamente (por ejemplo, cuando ocurre un error). Debido a ello, SHOW PROCESSLIST en MySQL 5.0 muestra Rolling back en la columna Statepara la conexión durante rollbacks implícitos y explícitos (comando SQL ROLLBACK).Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com
  8. 8. Procedimiento de almacenadoSon funcionalidades nuevas apertir de laversion 5.0 de MySQLEs un conjunto de comandos SQL que puedenalmacenarse en el servidor.Los clientes ya no necesitan relanzar loscomandos individuales.
  9. 9. Procesos de almacenadoSe usan cuando multiples aplicaciones cliente funcionan en distintas plataformas, o estan escritas en distintos lenguajes. Cuando la seguridad es muy importante.
  10. 10. Procesos de almacenado Los procesos de almacenados pueden enviarmenos informacion entre el servidor y el cliente.
  11. 11. Triggers o DisparadoresOtra de las nuevas características incluidas enMySQL, además 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 código antes (before) odespués (after) de que se produzca esteevento.
  12. 12. Sintaxis de los triggersCREATE TRIGGER <nombre> {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON <tablename> FOR EACH ROW BEGIN <sentenciasSQL> END;
  13. 13. EjemploCrearemos 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;
  14. 14. INSERT INTO clientes (nombre, seccion) VALUES (Miguel,informatica), (Rosa,comida), (Maria,ropa), (Albert,informatica), (Jordi,comida);
  15. 15. 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;
  16. 16. y finalmente un trigger que se disparará cadavez 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 ROW INSERT INTO auditoria_clientes(name, anterior_seccion, usuario, modificado ) VALUES (OLD.nombre, OLD.seccion, CURRENT_USER(), NOW() );
  17. 17. Graciaspor la Atencion Prestada

×