Page 1
©Prof. Lineu Mialaret Aula 25 - 1 Banco de Dados I
Banco de Dados I – BD I
Prof. Lineu Mialaret
Aula 25: Controle Transacional em BD
Instituto Federal de Educação, Ciência e
Tecnologia de São Paulo - IFSP Campus de Caraguatatuba
Tecnólogo em Análise e Desenvolvimento de Sistemas
10 Semestre de 2013
Page 2
©Prof. Lineu Mialaret Aula 25 - 2 Banco de Dados I
Introdução (1)
Page 3
©Prof. Lineu Mialaret Aula 25 - 3 Banco de Dados I
Introdução (2)
Uma transação é um programa em execução (sequência de instruções), o qual forma uma unidade lógica de processamento no banco de dados.
Uma transação inclui uma ou mais operações de acesso ao banco de dados
Englobam operações de inserção, exclusão, alteração ou recuperação.
Page 4
©Prof. Lineu Mialaret Aula 25 - 4 Banco de Dados I
Introdução (3)
Page 5
©Prof. Lineu Mialaret Aula 25 - 5 Banco de Dados I
Introdução (4)
Page 6
©Prof. Lineu Mialaret Aula 25 - 6 Banco de Dados I
Propriedades ACID (1)
Do ponto de vista dos Sistemas Gerenciadores de
Bancos de Dados (SGBD), ACID são propriedades
fundamentais nos processos transacionais, pois
garantem a consistência da base de dados.
Propriedades ACID:
Atomicidade;
Consistência;
Isolamento; e
Durabilidade.
Page 7
©Prof. Lineu Mialaret Aula 25 - 7 Banco de Dados I
Propriedades ACID (2)
Atomicidade
A propriedade de atomicidade garante que as
transações sejam atômicas (indivisíveis).
A transação será executada totalmente ou não será
executada.
Se durante a transação qualquer ação que constitui uma
unidade de trabalho falhar, a transação inteira deve ser
desfeita (rollback).
Quando todas as ações são efetuadas com sucesso, a
transação pode ser efetivada e persistida em banco
(commit).
Page 8
©Prof. Lineu Mialaret Aula 25 - 8 Banco de Dados I
Propriedades ACID (3)
Consistência
A propriedade de consistência garante que o banco de
dados passará de uma forma consistente para outra
forma também consistente.
Uma fotografia do banco (snapshot) é tirada e esse é
seu estado, depois de uma transação é retirada uma
nova foto, se a 1ª estava consistente a 2ª também
deverá estar.
Todas as regras e restrições definidas no banco de dados
devem ser obedecidas.
Relacionamentos por chaves estrangeiras, checagem de
valores para campos restritos ou únicos devem ser
obedecidos para que uma transação possa ser
completada com sucesso.
Page 9
©Prof. Lineu Mialaret Aula 25 - 9 Banco de Dados I
Propriedades ACID (4)
Isolamento
A propriedade de isolamento garante que a transação
não será interferida por nenhuma outra transação
concorrente.
Caso sejam executadas duas transações juntas
referentes ao mesmo dado, uma transação será
executada e todos os dados da tabela são alocados
para aquela transação e a outra somente será
executada após o término da 1ª.
Cada transação funciona completamente à parte de
outras estações. Todas as operações são parte de uma
transação única. O principio é que nenhuma outra
transação, operando no mesmo sistema, possa interferir
no funcionamento da transação corrente(é um mecanismo
de controle).
Outras transações não podem visualizar os resultados
parciais das operações de uma transação em andamento
Page 10
©Prof. Lineu Mialaret Aula 25 - 10 Banco de Dados I
Propriedades ACID (5)
Durabilidade
A propriedade de durabilidade garante que o que foi
salvo (persistido), não será mais perdido.
A responsabilidade fica sobre o subsistema de
restauração do SGBD.
Significa que os resultados de uma transação são
permanentes e podem ser desfeitos somente por uma
transação subsequente.
Por exemplo, todos os dados e status relativos a uma
transação devem ser armazenados num repositório
permanente, não sendo passíveis de falha por uma falha
de hardware.
Page 11
©Prof. Lineu Mialaret Aula 25 - 11 Banco de Dados I
Porque a Restauração é Necessária
O subsistema de restauração de transações do SGBD
é o responsável pela atomicidade.
Ele deverá garantir que:
Todas as operações na transação foram completadas
com sucesso e seu efeito será gravado
permanentemente no banco de dados; ou
A transação não terá nenhum efeito sobre o banco de
dados ou sobre quaisquer outras transações.
Page 12
©Prof. Lineu Mialaret Aula 25 - 12 Banco de Dados I
Suporte a Transações no MySQL
No SGBD MySQL o tipo de tabela que dá suporte a
transações é o InnoDB.
Por default o MySQL cria tabelas do tipo MYISA, logo,
caso se queira 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.
Page 13
©Prof. Lineu Mialaret Aula 25 - 13 Banco de Dados I
Tabelas InnoDB
Dotam o MySQL com um mecanismo de
armazenamento seguro com transações (compatível
com ACID) com commit, rollback, e recuperação em
caso de falhas.
InnoDB é o primeiro gerenciador de armazenamento
no MySQL que suportam restrições do tipo FOREIGN
KEY.
Foi desenvolvido para obter o máximo de
performance ao processar grande volume de dados.
Page 14
©Prof. Lineu Mialaret Aula 25 - 14 Banco de Dados I
Criação e Alteração de Tabela Innodb
Criação de tabela com tipo Innodb
create table teste (
teste_id int(2), teste_nome varchar(10)
) engine=innodb;
Criação tabela normal(MYISA - default)
create table teste1 (
teste_id int, teste_nome varchar(10)
);
Alteração de MYISA para Innodb
alter table teste1 engine =innodb;
Page 15
©Prof. Lineu Mialaret Aula 25 - 15 Banco de Dados I
Comandos Transacionais no MySQL
Por padrão, MySQL é executado em modo
autocommit.
Isto significa que assim que se executa uma instrução
que atualiza (modifica) uma tabela, o MySQL armazena
a atualização no disco.
Page 16
©Prof. Lineu Mialaret Aula 25 - 16 Banco de Dados I
Comandos Transacionais (1)
Caso se utilize de tabelas com segurança a
transação (como InnoDB\ou BDB), pode-se colocar o
MySQL em modo não autocommit com o seguinte
comando:
1 - SET AUTOCOMMIT=0
2 - START TRANSACTION
A diferença entre (1) e (2) é que usando (2) o
AUTOCOMMIT volta a estar habilitado quando se
termina a transação (um comando COMMIT ou um
comando ROLLBACK).
Page 17
©Prof. Lineu Mialaret Aula 25 - 17 Banco de Dados I
Comandos Transacionais (2)
Com o autocommit desabilitado, pode-se utilizar os
comandos:
COMMIT, para armazenar suas alterações em disco;
ROLLBACK, caso se deseje ignorar as alterações que
foram feitas desde o início da transação.
SAVEPOINT, que cria um ponto de retorno; e
ROLLBACK TO SAVEPOINT, que desfaz as operações
até o ponto de retorno.
Page 18
©Prof. Lineu Mialaret Aula 25 - 18 Banco de Dados I
Comandos Transacionais (3)
Quando um SAVEPOINT é criado usando um nome já
atribuído a outro SAVEPOINT, o
SAVEPOINT antigo é apagado e o nome
atribuído ao novo SAVEPOINT.
Page 19
©Prof. Lineu Mialaret Aula 25 - 19 Banco de Dados I
Exemplo 1
START TRANSACTION;
INSERT INTO tb1 (id,nome,email) VALUES (2,'Nome
X','[email protected] ');
INSERT INTO tb2 (id,nome,email) VALUES (3,'Nome
Y','[email protected] ');
COMMIT;
Page 20
©Prof. Lineu Mialaret Aula 25 - 20 Banco de Dados I
Exemplo 2
SET AUTOCOMMIT = 0;
SAVEPOINT meu_ponto1;
UPDATE tb_dinheiro SET qtd = qtd300 WHERE client_id = '10';
SAVEPOINT meu_ponto2;
UPDATE tb_dinheiro SET qtd = qtd+300 WHERE client_id = '15';
SELECT qtd FROM tb_dinheiro WHERE client_id = '10';
SELECT qtd FROM tb_dinheiro WHERE client_id = '15';
ROLLBACK TO SAVEPOINT meu_ponto2;
SELECT qtd FROM tb_dinheiro WHERE client_id = '15';
ROLLBACK TO SAVEPOINT meu_ponto1;
SELECT qtd FROM tb_dinheiro WHERE client_id = '10';
COMMIT;
Page 21
©Prof. Lineu Mialaret Aula 25 - 21 Banco de Dados I
Nem Tudo Pode ser Desfeito
Há comandos SQL que não podem ser desfeitos com o
ROLLBACK ou com o ROLLBACK TO SAVE POINT,
isso porque causam um COMMIT implicitamente ao
serem declarados.
Deve-se tomar cuidado com o uso
desses comandos dentro de suas transações.
Page 22
©Prof. Lineu Mialaret Aula 25 - 22 Banco de Dados I
Comandos que Não Podem Ser Desfeitos
• ALTER FUNCTION,
• ALTER PROCEDURE,
• ALTER TABLE,
• CREATE DATABASE,
• CREATE FUNCTION,
• CREATE INDEX,
• CREATE PROCEDURE,
• CREATE TABLE,
• DROP DATABASE,
• DROP FUNCTION,
• DROP INDEX,
• DROP PROCEDURE,
• DROP TABLE,
• LOAD MASTER DATA,
• LOCK TABLES,
• LOAD DATA INFILE,
• RENAME TABLE,
• SET AUTOCOMMIT=1,
• START TRANSACTION,
• TRUNCATE TABLE,
• UNLOCK TABLES.
Page 23
©Prof. Lineu Mialaret Aula 25 - 23 Banco de Dados I
Set Transaction (1)
SET [GLOBAL | SESSION] TRANSACTION ISOLATION
LEVEL { READ UNCOMMITTED | READ COMMITTED |
REPEATABLE READ | SERIALIZABLE }
O comportamento padrão é definir o nível de isolação
para a próxima (não iniciada) transação. Caso se use a
palavra-chave GLOBAL, a instrução define o nível de
transação padrão globalmente para todas as novas
conexões criadas a partir deste ponto (mas não existe
conexão).
Precisa-se do privilégio SUPER para fazer isto. Usar a
palavra-chave SESSION define o nível de transação
padrão para todas a transações futuras realizadas na
conexão atual.
Page 24
©Prof. Lineu Mialaret Aula 25 - 24 Banco de Dados I
ISOLATION LEVEL define o nível de isolação da
transação para global, toda a sessão ou a próxima
transação.
SET TRANSACTION ISOLATION LEVEL READ
UNCOMMITTED, para ler dados de quaisquer transações
não-completadas;
SET TRANSACTION ISOLATION LEVEL READ
COMMITTED, para ler dados somente de transações
completas, incluindo comandos internos;
SET TRANSACTION ISOLATION LEVEL REPEATABLE
READ, para ler dados somente de transações completas; e
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE,
para utilizar em conjunto com SELECT…LOCK IN SHARE
MODE
Set Transaction (2)
Page 25
©Prof. Lineu Mialaret Aula 25 - 25 Banco de Dados I
A diferença real entre o READ COMMITED e o
REPEATABLE READ acontece em transações com
mais de um comando. Caso se envie, por exemplo,
uma série de consultas e atualizações dentro de uma
mesma transação, os dois modos lerão dados de
pontos diferentes:
READ COMMITED atualizará os dados de leitura a cada
comando. Um update em seguida do outro utilizará os
dados atualizados, respeitando a transação no qual eles
se encontram; e
REPEATABLE READ utilizará sempre um único conjunto
de dados inicial. Se você efetuar várias atualizações, as
leituras serão feitas do mesmo conjunto inicial sempre,
relativo ao início da transação. Esse é o modo padrão no
MySQL.
Set Transaction (3)
Page 26
©Prof. Lineu Mialaret Aula 25 - 26 Banco de Dados I
Exemplo Prático (1)
Page 27
©Prof. Lineu Mialaret Aula 25 - 27 Banco de Dados I
Exemplo Prático (2)
Set @autocommit = 0;
Page 28
©Prof. Lineu Mialaret Aula 25 - 28 Banco de Dados I
Exemplo Pratico com Savepoint