Banco de Dados-transações

  • Upload
    carlos

  • View
    244

  • Download
    1

Embed Size (px)

Citation preview

Banco de Dados: Suporte a Transaes (MySQL)

Transaes: Introduo Transaes, so seqncias de operaes que so executadas aps um delimitador e finalizadas aps outro delimitador. No caso do Mysql, nosso delimitador de inicio o comando start transaction, e o delimitador de fim de transao pode ser commit ou rollback.

Tipo de Tabelas No mysql o tipo de tabela que d suporte a transaes o InnoDB. Por default o mysql cria tablelas do tipo MYISA, logo, se voc quiser ativar o suporte a transaes, ser necessrio realizar a converso dos tipos da tabela, do tipo padro para o InnoDb e/ou cri-las e especificar o tipo desejado.

Tipos de TabelasMYISA O tipo MYISA utiliza trs arquivos para cada tabela: Arquivo *.frm Arquivo *.MYD Arquivo *.MYD

InnoDB J o tipo InnoDB utiliza apenas um arquivo: Arquivo *.frm

Logo, aps a converso, existir apenas um arquivo *.frm para cada tabela.

Exemplo Primeiramente, vamos realizar a criao 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 criao o parmetro type=innodb.

Converso de Tabelas Vamos realizar agora a converso 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),

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

Atravs do comando alter, trocamos o tipo da tabela para InnoDB. Pronto, agora nossas tabelas j possuem suporte a transaes.

Transao 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 transao, temos que desabilitar o autocommit, pelo menos para aquela instncia da transao. mysql> set autocommit=0; Query OK, 0 rows affected (0.02 sec)

Transao Vamos inicar nossa trasao: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 sero gravados no banco e disponibilizado para todos. mysql> commit;

Transao Caso o resultado tenha apresentado erro, ou no seja satisfatrio, basta executar um rollback e todos os comandos digitados aps o start transaction sero desconsiderados. mysql> rollback; Conforme o explicado, conseguimos implementar as transaes, da mesma forma que outros Banco de Dados comerciais utilizam. Com isso trazemos maior segurana e escalabilidade para nossas aplicaes, utilizando um banco de dados open source.

Observaes Nas verses anteriores a 4.0.11, ao invs de utilizar o comando start transaction, use o comando begin Antes da converso das tabelas de produo, faa 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 padro de criao de tabelas para InnoDB, basta acrescentar a linha default-tabletype=innodb na sesso [mysqld] do arquivo `my.cnf' ou `my.ini

Exerccio Criar um banco de dados chamado banco_uema; Criar uma estrutura de tabelas conforme a seguir:

Realizar transao entre contas de clientes.

ExerccioCREATE TABLE cliente ( id_cliente INTEGER(11) NOT NULL, nome_cliente VARCHAR(10) NOT NULL, cidade_cliente VARCHAR(10) NULL, PRIMARY KEY(id_cliente) ) TYPE=InnoDB; CREATE TABLE agencia ( id_agencia INTEGER(11) UNSIGNED NOT NULL, nome_agencia VARCHAR(10) NOT NULL, cidade_agencia VARCHAR(15) NOT NULL, PRIMARY KEY(id_agencia) ) TYPE=InnoDB; CREATE TABLE conta ( id_conta INTEGER(11) NOT NULL, id_cliente INTEGER(11) NOT NULL, nome_conta VARCHAR(10) NOT NULL, valor FLOAT NOT NULL, id_agencia INTEGER(11) UNSIGNED NOT NULL, PRIMARY KEY(id_conta) ) TYPE=InnoDB;

Exerccio Inserir dados nas tabelas; Realizar uma transferncia entre contas correntes; Emitir os passos das transferncias; Decidir se faz commit ou rollback.