Uma transação é uma coleção de operações que desempenha uma função lógica única. Ela tem que ter as seguintes propriedades:
Na atual versão do Calypte, somente o nível de isolamento READ COMMITTED é suportado. Ele permite que uma transação leia e manipule os dados já confirmados por outras transações. As alterações dentro de uma transação somente ficarão visíveis para as demais após a sua confirmação. Esse nível de isolamento evita a leitura suja, porém, permite a leitura fantasma e a leitura não repetitiva.
Uma transação é iniciada com o uso do comando
begin
e finalizada com o comando commit
ou rollback
.
O comando begin
marca o início de uma transação. Será retornado
ok
se o comando for executado com sucesso ou uma mensagem de erro.
Após executado o comando, as operações serão agrupadas em uma transação que
deve ser confirmada com o comando commit
ou descartadas com o
comando rollback
.
//inicia a transação. begin ok
O comando commit
confirma todas as operações da transação
atual e libera todos os bloqueios detidos pela atual sessão.
Será retornado ok
se o comando for executado com sucesso ou uma mensagem de erro.
//inicia a transação. begin ok ... //confirma todas as operações commit ok
O comando rollback
desfaz todas as operações da transação
atual e libera todos os bloqueios detidos pela atual sessão.
Será retornado ok
se o comando for executado com sucesso ou uma mensagem de erro.
//inicia a transação. begin ok ... //cancela todas as operações. rollback ok
Uma outra forma de iniciar e finalizar transações é usando o modo de confirmação
automática. Ele é ligado e desligado com o comando set_var auto_commit valor
.
Para iniciar o modo de confirmação automática o valor
tem que ser true
e para desligá-lo false
. Ao religá-lo, todas as operações executadas após seu
desligamento serão confirmadas. Isto equivale ao comando commit
.
Se o modo de confirmação automática estiver ligado, todas as operações serão tratadas
como transações individuais. Caso contrário, as operações serão
agrupadas em uma transação que pode ser confirmada com o comando commit
ou descartadas com o comando rollback
.
Por padrão, cada nova conexão inicia com o modo de confirmação automática ligada.
//inicia a transação. set_var auto_commit false ok ... //confirma todas as operações. set_var auto_commit true ok
Para resolver o problema de leitura fantasma e leitura não
repetitiva, é oferecido a opção de bloquear um determinado
item no momento de sua seleção. A opção é o parâmetro forUpdate do
comando get
que tem que ser 1
.
Depois que o comando get
é
executado, o item fica bloqueado até que o comando commit
ou
rollback
seja executado.
//inicia a transação begin ok //obtém o valor e o bloqueia get key 1 value key 5 0 12345 end //atualiza o valor set key 0 0 5 00000 end replaced //confirma a alteração commit ok