MySQLi - 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á.

Na prática, 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 conhecidas pela sigla ACID -

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

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

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

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

No MySQL, as transações começam com a instrução BEGIN WORK e terminam com uma instrução COMMIT ou ROLLBACK. Os comandos SQLi 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 comando 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 mysqli_query() função.

Exemplo genérico na 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 mysqli_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 o comando ROLLBACK, caso contrário, emita um comando COMMIT.

Tipos de tabela segura para transações no MySQLi

Você não pode usar as transações diretamente, você pode, mas elas não seriam seguras e garantidas. Se você planeja usar transações em sua programação MySQLi, então você 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 MySQLi da fonte. Se sua versão do MySQLi não tiver suporte para InnoDB, peça ao seu provedor de serviços de Internet para construir uma versão do MySQLi com suporte para tipos de tabela InnoDB ou baixe e instale a distribuição binária MySQL-Max para Windows ou Linux / UNIX e trabalhe com o tipo de tabela em um ambiente de desenvolvimento.

Se a sua instalação do MySQLi suporta tabelas InnoDB, basta adicionar um TYPE = InnoDBdefinição para a instrução de criação da tabela. Por exemplo, o código a seguir cria uma tabela InnoDB chamada tutorials_innodb -

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

mysql> use TUTORIALS;
Database changed

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

Verifique o seguinte link para saber mais sobre - InnoDB

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