Transação não funciona no Mysql

Publicado por: Vanderson da Silva
Postado: 16-07-2015
Atualizado:06-10-2016

Recentemente passei por um problema que ocorria com MySQL, que era o seguinte, ao analisar um comportamento estranho em um código com um trecho que tinha uma transação de banco (BEGIN, COMMIT, ROLLBACK) onde os comandos eram executados normalmente sem nenhum tipo de erro, porem após fazer um teste básico:

begin;
INSERT INTO nome_tabela (foo, bar)
 VALUES (317340, 400377);
ROLLBACK;

mesmo eu dando o ROLLBACK o registro era inserido, depois de pesquisar li em algum lugar sobre os tipos de ENGINE da tabela no MYSQL e entendi que as tabelas com ENGINE=MyISAM não trabalham com transação e que para que eu pudesse trabalhar com transação teria que mudar a ENGINE  da tabela para InnoDB.

Após alterar para InnoDB tudo funcionou como eu queria, transação controlada.

 

Como saber a ENGINE da sua tabela:

SHOW TABLE STATUS WHERE Name = 'nome_da_tabela'

 

Como alterar a ENGINE da sua tabela

ALTER TABLE <table-name> ENGINE=INNODB;

Não vou entrar no mérito da diferença entre MyISAM x InnoDB cada um tem vantagens e desvantagens, mas acredito que se você quer trabalhar com transação sua escolha deve ser InnoDB.

Valeu!!

 

Categoria: MySQL