Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cícero Martins

[Resolvido] MySQL Rollback

Recommended Posts

Olá pessoal,

 

Alguém poderia me dar uma luz de como fazer o ROLLBACK funcionar no MySQL?

 

Minhas tabelas são do tipo InnoDB e mesmo assim o ROLLBACK não rola.

 

Estou tentando executar essas linhas direto no MySQL só pra testar e não vai....

START TRANSACTION;

INSERT INTO clientes (nome, sobrenome) VALUES ('Teste', 'Teste');
INSERT INTO usuarios (nome, usuario) VALUES ('Teste', '');

ROLLBACK;

 

 

Ou seja,

Os registros estão sendo inseridos da mesma forma, enquanto o ROLLBACK obrigaria que fossem desfeitos.

 

Alguém pode me dar uma luz?

 

 

Abraços e FELIZ 2013!

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se propriedade auto comit esta ativa(true), deixe ela false assim você vai trabalhar com uma transação em 2 fases.

 

com o auto comit ativo td trasanção é escrita direto no banco por exemplo (inser, update, delete) quando ele esta desativado você é obrigado no final da instrução a colocar comit caso contrario a mundaça não sera efetuada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Shini,

 

Já tentei fazer SET AUTOCOMMIT = 0, não resolveu!

 

Pelo PHP já tentei

mysqli_autocommit($bdcon, FALSE);
mysqli_query($bdcon, "INSERT INTO pessoas (nome, sobrenome) VALUES ('KKKKK', 'kkkkk')");
mysqli_query($bdcon, "INSERT INTO pessoas (nome, sobrenome) VALUES ('KKKKK', 'kkkkk')");
mysqli_query($bdcon, "INSERT INTO clientes (nome, sobrenome) VALUES ('KKKKK', 'kkkkk')");
mysqli_query($bdcon, "INSERT INTO usuarios (nome, usuario) VALUES ('KKKKK', 'aaaaa')");
mysqli_rollback($bdcon);

 

Não deu certo mesmo assim!

 

 

O que pode ser?

 

Abraço!

 

Engraçado que faço um SELECT @@AUTOCOMMIT ele me retorna 0 (desativado), porém mesmo assim ele está gravando automático!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer isso utilizando a linha de comando do MySQL, ou uma ferramenta que não o utilize em conjunto com o PHP para ver se o erro persiste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue tentativa de execução e resultados direto no MySQL (phpMyAdmin).

 

SET AUTOCOMMIT = 0;# MySQL retornou um conjunto vazio (ex. zero registros).

START TRANSACTION;# MySQL retornou um conjunto vazio (ex. zero registros).

INSERT INTO clientes (nome) VALUES ('Teste');# 1 linha afetada.

ROLLBACK;# MySQL retornou um conjunto vazio (ex. zero registros).

 

Quando vou olhar na tabela, o registro foi inserido!

 

Tentei copiar o exemplo do MANUAL OFICIAL DO PHP, apenas substituindo o nome das tabelas e não deu certo! Ele continua salvando automatico, ou seja, rollback sem efeito algum!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está usando MyISAM ?

 

MyISAM não suporta TRANSACTION..

 

Se for o caso, troque para InnoDB

 

 

 

SET AUTOCOMMIT = 0;
BEGIN;
START TRANSACTION;

...

ROLLBACK;

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom,

 

Já estou trabalhando com InnoDB...

Inclusive, pra me assegurar, fiz um:

ALTER TABLE clientes TYPE = InnoDB;
ALTER TABLE clientes ENGINE = InnoDB;

 

Tentei executar a seguinte QUERY no MySQL

 

SET AUTOCOMMIT=0;
BEGIN;
START TRANSACTION;
INSERT INTO clientes (nome) VALUES ('TESTE');
ROLLBACK;

 

 

Resultado: SEM SUCESSO!

 

 

A operação é realizada, é como se o SET AUTOCOMMIT não tivesse efeito algum.

Se eu der um SET AUTOCOMMIT=0; e depois um SELECT @@AUTOCOMMIT, ele me retorna 0 (desativado). Porém quando faço o INSERT e depois ROLLBACK, nada acontece! O INSERT é feito normalmente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem provável seu usuário não possuir permissão para alterações desse nível.

 

Realize uma solicitação junto ao suporte do servidor de hospedagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito!

 

Estou fazendo isso e dou um feedback em breve.

 

Estranho é que ao realizar o SET AUTOCOMMIT=0; ele faz a alteração normal, se dou um SELECT @@AUTOCOMMIT ele me retorna 0 (desativado) perfeitamente...

 

 

A não ser que meu usuário ignora configurações realizadas por fora do arquivo de configuração. É, permissão é uma possibilidade!

 

 

Estou fazendo novos testes e retorno com o resultado!

 

 

Por enquanto, obrigado!

 

RESOLVIDO!

 

Realizei a troca de provedor e no novo provedor consegui realizar as alterações citadas!

Obrigado à todos pela paciência e pela ajuda!

 

O mesmo comando do início do post, funcionou no novo provedor!

 

Um abraço e FELIZ 2013!

 

RESOLVIDO!

 

Realizei a troca de provedor e no novo provedor consegui realizar as alterações citadas!

Obrigado à todos pela paciência e pela ajuda!

 

O mesmo comando do início do post, funcionou no novo provedor!

 

Um abraço e FELIZ 2013!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.