Notre application déclenche une requête INSERT dans la base de données MySQL pour ajouter des enregistrements. Je veux savoir si les enregistrements sont automatiquement validés. Si j'exécute la commande ROLLBACK, quand la base de données effectue-t-elle une restauration? Un ROLLBACK est-il possible après un COMMIT?
13
Réponses:
La réponse à votre question dépend de si vous êtes ou non dans une transaction qui s'étalera sur plusieurs déclarations. (Vous avez marqué la question avec InnoDB, la réponse serait différente avec MyISAM.)
Depuis le manuel de référence: http://dev.mysql.com/doc/refman/5.1/en/commit.html
Donc oui, par défaut, si vous utilisez simplement
INSERT
, les enregistrements que vous insérez seront validés, et il est inutile d'essayer de les restaurer. (Cela revient en fait à encapsuler chaque instruction entreBEGIN
etCOMMIT
.)Cependant, si vous traitez explicitement des transactions, vous devrez utiliser
COMMIT
pour valider le stockage des enregistrements, mais vous pourrez également l'utiliserROLLBACK
.Vous pouvez démarrer une transaction explicitement en utilisant
START TRANSACTION
(ouBEGIN
). Ceci est indépendant duautocommit
paramètre (activé par défaut):Alternativement, si
autocommit=0
, je pense que toute déclaration suivant une autre fin de transaction, démarrera une transaction (mais vous pouvez toujours l'utiliserSTART TRANSACTION
explicitement); c'est du moins ainsi que j'interprète ceci :Plus précisément, "une autre façon de commencer une transaction" semble impliquer que la définition de "autocommit = 0" est suffisante pour démarrer une transaction (au moins juste avant chaque instruction au début d'une session ou qui suit un
COMMIT
/ROLLBACK
). Je suggérerais d'utiliserBEGIN
ouSTART TRANSACTION
explicitement de toute façon même siautocommit=0
, car cela peut rendre plus clair de voir quand la transaction commence ou se termine.(La façon dont vous démarrez une transaction peut dépendre de la façon dont votre application utilise MySQL.)
la source
Par défaut, InnoDB est défini sur autocommit = 1 ou ON . Une fois engagés, ils ne peuvent pas être annulés .
Vous devrez faire l'une des deux choses pour le désactiver à l'avenir:
OPTION 1: Ajoutez ceci à /etc/my.cnf et redémarrez mysql
OPTION 2: effectuez l'une de ces opérations dans la base de données DB ouverte avant de commencer tout SQL significatif
Sous ces deux options, vous devrez effectuer un COMMIT manuel ou un ROLLBACK manuel .
CAVEAT
Si le tableau est MyISAM, l'explication est plus simple. Comme il n'y a aucune transaction pour le moteur de stockage MyISAM, tous les INSERT, UPDATE et DELETE exécutés sont permanents. Aucun retour en arrière.
la source