login
Thu 23 of Nov, 2017 (12:53 UTC)

[root@madeira.eng.br ~]#

Linux - It is now safe to turn on your computer

atualizar cache imprimir

Mysql: Suporte a Transação

Criada por: Frederico Madeira, última modificação em: Mon 02 of Oct, 2006 (16:23 UTC)
Transações são seqüências de operações que são executadas após um delimitador e finalizadas após outro delimitador. No caso do Mysql, nosso delimitador de inicio é o comando start transaction, e o delimitador de fim de transação pode ser commit ou rollback.

No MySQL, o tipo de tabela que dá suporte a transações é o InnoDB. Por default, o MySQL cria tablelas do tipo MYISA. Logo, se você quiser ativar o suporte a transações, será necessário realizar a conversão dos tipos da tabela, do tipo padrão para o InnoDb e/ou criá-las e especificar o tipo desejado.

O tipo MYISA utiliza três arquivos para cada tabela:

Arquivo *.frm
Arquivo *.MYD
Arquivo *.MYD

Já o tipo InnoDB utiliza apenas um arquivo:

Arquivo *.frm

Logo, após a conversão, existirá apenas um arquiovo *.frm para cada tabela.

Primeiramente vamos realizar a criação de uma tabela InnoDB:

mysql> create table teste (teste_id int(2), teste_nome varchar(10)) type=innodb;
Query OK, 0 rows affected (1.15 sec)


Observe que adicionamos a nossa estrutura de criação o parâmetro type=innodb.

Vamos realizar agora a conversão de uma tabela:

mysql> create table teste1 (teste_id int(2), teste_nome varchar(10));
Query OK, 0 rows affected (0.13 sec)


Criamos a tabela teste1 com o tipo MYISA (default).

mysql> alter table teste1 type=innodb;
Query OK, 0 rows affected (0.38 sec)
Records: 0 Duplicates: 0 Warnings: 0


Através do comando alter, trocamos o tipo da tabela para InnoDB.

Pronto, agora nossas tabelas já possuem suporte a transações.

Vamos agora inicar uma transação.

O MySQL, por default, trabalha no modo de autocommit. Isso significa que sempre que você executa um comando, ele é imediatamente executado/gravado no banco. Seja ele certo ou errado.

Para iniciarmos uma transação, temos que desabilitar o autocommit, pelo menos para aquela instância da transação.

mysql> set autocommit=0;
Query OK, 0 rows affected (0.02 sec)


Vamos inicar nossa trasação:

mysql> start transaction;
Query OK, 0 rows affected (0.02 sec)

--> Comandos SQL
--> Comandos SQL
--> Comandos SQL
--> Comandos SQL


Ao terminar, se estiver satisfeito com os comandos acima, basta entrar com o comando commit que os resultados dos sql acima serão gravados no banco e disponibilizado para todos.

mysql> commit;


Caso o resultado acima tenha apresentado erro, ou não seja satisfatório, basta executar um rollback e todos os comandos digitados após o start transaction serão desconsiderados.

mysql> rollback;


Conforme o explicado acima, conseguimos implementar as transações, da mesma forma que outros Banco de Dados comerciais utilizam. Com isso trazemos maior segurança e escalabilidade para nossas aplicações, utilizando um banco de dados open source.

Observações:

  • Nas versões anteriores a 4.0.11, ao invés de utilizar o comando start transaction, use o comando begin;

  • Antes da conversão das tabelas de produção, faça um backup;

  • Para desativar o modo autocommit do mysql, adicione no arquivo my.cnf ou my.ini a linha autocommit=0;

  • Para alterar o tipo padrão de criação de tabelas para InnoDB, basta acrescentar a linha default-table-type=innodb na sessão mysqld do arquivo `my.cnf" ou `my.ini.

Abraço a todos!

Comentários

Reply to this comment

Teste

por Fred, Mon 17 of Aug, 2009 (03:33 UTC)
trese