Exemplo de START TRANSACTION operando com COMMIT e ROLLBACK para transações de risco (Php + Mysql)

para isso vou usar uma tabela simples: DROP TABLE IF EXISTS `teste`;CREATE TABLE  `teste` (  `id` int(9) NOT NULL AUTO_INCREMENT,  `nome` varchar(45) NOT NULL,  `valor` float(9,2) NOT NULL,  `total` float(9,2) NOT NULL,  `data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

Tem-se o código php abaixo onde AUTOCOMMIT=0 indica que o commit será feito de maneira manual e o START TRANSACTION que indica o início da transação; então são executadas algumas inserções e alterações e aparece o primeiro COMMIT, depois aparece um ROLLBACK que desfaz todas as alterações até o primeiro COMMIT.  Utilizar a estrutura de transações é muito importante quando se pretende manter a integridade de um determinado processo, e não deixar algum processo efetuado pela metade sem que possa começa-lo novamente.

<?php

  1. mysql_connect(‘teste’,'root’, ”) or die(mysql_error()); mysql_select_db($_SESSION[db]) or die(mysql_error());
  2. mysql_query(‘SET AUTOCOMMIT=0′) or die(mysql_error());
  3. mysql_query(“START TRANSACTION”) or die(mysql_error());
  4. $sql_2 = ” INSERT INTO teste (nome, valor, total) VALUES (‘paulo’, 1, 1) “;
  5. print (mysql_query($sql_2)) ? ’2) sql executado com sucesso.
  6. ‘ : mysql_error();
  7. $sql_2 = ” INSERT INTO teste (nome, valor, total) VALUES (‘joao’, 2, 2 ) “;
  8. print (mysql_query($sql_2)) ? ’2) sql executado com sucesso.
  9. ‘ : mysql_error();
  10. $sql_1 = “UPDATE teste SET valor = 10, total = 10 WHERE id = 1 “;
  11. print (mysql_query($sql_1)) ? ’1) alterado com sucesso.
  12. ‘ : mysql_error();
  13. mysql_query(“COMMIT”) or die(mysql_error());
  14. $sql_3 = ” INSERT INTO teste (nome, valor, total) VALUES (‘bobe’, 3, 3 ) “;
  15. print (mysql_query($sql_3)) ? ’3) sql executado com sucesso.
  16. ‘ : mysql_error();
  17. $sql_4 = ” UPDATE teste SET valor = 10, total = 10 WHERE id = 2 “;
  18. print (mysql_query($sql_4)) ? ’4) alterado com sucesso.
  19. ‘ : mysql_error();
  20. $sql_5 = ” UPDATE teste SET valor = 50, total = 50 WHERE id = 3 “;
  21. print (mysql_query($sql_5)) ? ’5) alterado com sucesso.
  22. ‘ : mysql_error();
  23. mysql_query(“ROLLBACK”) or die(mysql_error());

?>

Deixar um comentário

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Modificar )

Imagem do Twitter

You are commenting using your Twitter account. Log Out / Modificar )

Facebook photo

You are commenting using your Facebook account. Log Out / Modificar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.