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
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
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)
Query OK, 0 rows affected (0.02 sec)
Vamos inicar nossa trasação:
mysql>
start transaction;
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
--> Comandos SQL
--> Comandos SQL
--> Comandos SQL
--> 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.
Muito eficiente esse tutorial .