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
- mysql_connect(‘teste’,'root’, ”) or die(mysql_error()); mysql_select_db($_SESSION[db]) or die(mysql_error());
- mysql_query(‘SET AUTOCOMMIT=0′) or die(mysql_error());
- mysql_query(“START TRANSACTION”) or die(mysql_error());
- $sql_2 = ” INSERT INTO teste (nome, valor, total) VALUES (‘paulo’, 1, 1) “;
- print (mysql_query($sql_2)) ? ’2) sql executado com sucesso.
- ‘ : mysql_error();
- $sql_2 = ” INSERT INTO teste (nome, valor, total) VALUES (‘joao’, 2, 2 ) “;
- print (mysql_query($sql_2)) ? ’2) sql executado com sucesso.
- ‘ : mysql_error();
- $sql_1 = “UPDATE teste SET valor = 10, total = 10 WHERE id = 1 “;
- print (mysql_query($sql_1)) ? ’1) alterado com sucesso.
- ‘ : mysql_error();
- mysql_query(“COMMIT”) or die(mysql_error());
- $sql_3 = ” INSERT INTO teste (nome, valor, total) VALUES (‘bobe’, 3, 3 ) “;
- print (mysql_query($sql_3)) ? ’3) sql executado com sucesso.
- ‘ : mysql_error();
- $sql_4 = ” UPDATE teste SET valor = 10, total = 10 WHERE id = 2 “;
- print (mysql_query($sql_4)) ? ’4) alterado com sucesso.
- ‘ : mysql_error();
- $sql_5 = ” UPDATE teste SET valor = 50, total = 50 WHERE id = 3 “;
- print (mysql_query($sql_5)) ? ’5) alterado com sucesso.
- ‘ : mysql_error();
- mysql_query(“ROLLBACK”) or die(mysql_error());
?>