sexta-feira, 2 de março de 2012

MySQL - Suporte a Transações

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.

0 comentários:

Postar um comentário

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Eagle Belt Buckles