Usando o MariaDB, estou executando uma inserção em uma tabela e depois tentando executar outra inserção na segunda tabela. Devido a uma restrição, a segunda inserção só deverá ser bem-sucedida se a primeira for bem-sucedida.
Se eu tentar realizar as duas inserções em uma transação, a segunda inserção falhará com um erro de integridade. Se eu confirmar a primeira inserção, a segunda inserção será bem-sucedida.
Estou correto ao assumir que ambas as inserções devem ser possíveis em uma única transação?
O caso real que estou analisando é um pouco mais complicado: há duas inserções sem restrições e uma terceira com uma restrição que só terá sucesso se as duas primeiras inserções tiverem sucesso. A terceira inserção usa a tupla das chaves primárias das duas primeiras tabelas para sua chave primária.
A solução foi
FLUSH
e nãoCOMMIT
depois das inserções. Desta forma, as informações necessárias para cumprir a restrição ficam disponíveis para a sessão e a terceira inserção é bem-sucedida. Toda a transação pode então ser confirmada. Se, no entanto, ocorrer uma exceção, quaisquer inserções bem-sucedidas poderão ser revertidas.