MySQL - Transações

Uma transação é um grupo sequencial de operações de manipulação de banco de dados, que é executado como se fosse uma única unidade de trabalho. Em outras palavras, uma transação nunca será concluída a menos que cada operação individual dentro do grupo seja bem-sucedida. Se qualquer operação dentro da transação falhar, toda a transação falhará.

Praticamente, você agrupará muitas consultas SQL em um grupo e executará todas elas juntas como parte de uma transação.

Propriedades das transações

As transações têm as quatro propriedades padrão a seguir, geralmente referidas pela sigla ACID -

  • Atomicity- Isso garante que todas as operações dentro da unidade de trabalho sejam concluídas com êxito; caso contrário, a transação é abortada no ponto de falha e as operações anteriores voltam ao estado anterior.

  • Consistency - Isso garante que o banco de dados mude de estado corretamente após uma transação confirmada com sucesso.

  • Isolation - Isso permite que as transações operem de forma independente e transparente entre si.

  • Durability - Isso garante que o resultado ou efeito de uma transação confirmada persista em caso de falha do sistema.

No MySQL, as transações começam com a instrução BEGIN WORK e terminar com um COMMIT ou um ROLLBACKdeclaração. Os comandos SQL entre as instruções inicial e final formam a maior parte da transação.

COMMIT e ROLLBACK

Essas duas palavras-chave Commit e Rollback são usados ​​principalmente para transações MySQL.

  • Quando uma transação bem-sucedida é concluída, o comando COMMIT deve ser emitido para que as alterações em todas as tabelas envolvidas tenham efeito.

  • Se ocorrer uma falha, um comando ROLLBACK deve ser emitido para retornar todas as tabelas referenciadas na transação ao seu estado anterior.

Você pode controlar o comportamento de uma transação definindo a variável de sessão chamada AUTOCOMMIT. Se AUTOCOMMIT for definido como 1 (o padrão), cada instrução SQL (dentro de uma transação ou não) é considerada uma transação completa e confirmada por padrão quando termina.

Quando AUTOCOMMIT é definido como 0, emitindo o SET AUTOCOMMIT = 0 , a série subsequente de instruções age como uma transação e nenhuma atividade é confirmada até que uma instrução COMMIT explícita seja emitida.

Você pode executar esses comandos SQL em PHP usando o mysql_query() função.

Um exemplo genérico de transação

Essa sequência de eventos é independente da linguagem de programação usada. O caminho lógico pode ser criado em qualquer idioma que você usar para criar seu aplicativo.

Você pode executar esses comandos SQL em PHP usando o mysql_query() função.

  • Comece a transação emitindo o comando SQL BEGIN WORK.

  • Emita um ou mais comandos SQL como SELECT, INSERT, UPDATE ou DELETE.

  • Verifique se não há erro e tudo está de acordo com sua exigência.

  • Se houver algum erro, emita um comando ROLLBACK, caso contrário, emita um comando COMMIT.

Tipos de tabela segura para transações no MySQL

Você não pode usar transações diretamente, mas para certas exceções você pode. No entanto, eles não são seguros e garantidos. Se você planeja usar transações em sua programação MySQL, precisa criar suas tabelas de uma maneira especial. Existem muitos tipos de tabelas que suportam transações, mas o mais popular éInnoDB.

O suporte para tabelas InnoDB requer um parâmetro de compilação específico ao compilar o MySQL a partir da fonte. Se sua versão do MySQL não tiver suporte para InnoDB, peça ao seu provedor de serviços de Internet para construir uma versão do MySQL com suporte para tipos de tabela InnoDB ou baixe e instale oMySQL-Max Binary Distribution para Windows ou Linux / UNIX e trabalhar com o tipo de tabela em um ambiente de desenvolvimento.

Se a sua instalação do MySQL suportar tabelas InnoDB, basta adicionar um TYPE = InnoDB definição para a instrução de criação da tabela.

Por exemplo, o código a seguir cria uma tabela InnoDB chamada tcount_tbl -

[email protected]# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tcount_tbl
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)

Para obter mais detalhes sobre InnoDB, você pode clicar no seguinte link - InnoDB

Você pode usar outros tipos de tabela como GEMINI ou BDB, mas depende da sua instalação, se ele suporta esses dois tipos de mesa ou não.