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
Par défaut, MySQL s'exécute avec le mode de validation automatique activé. Cela signifie que dès que vous exécutez une instruction qui met à jour (modifie) une table, MySQL stocke la mise à jour sur le disque pour la rendre permanente.
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 entre BEGIN
et COMMIT
.)
Cependant, si vous traitez explicitement des transactions, vous devrez utiliser COMMIT
pour valider le stockage des enregistrements, mais vous pourrez également l'utiliser ROLLBACK
.
Vous pouvez démarrer une transaction explicitement en utilisant START TRANSACTION
(ou BEGIN
). Ceci est indépendant du autocommit
paramètre (activé par défaut):
Avec START TRANSACTION, la validation automatique reste désactivée jusqu'à ce que vous mettiez fin à la transaction avec COMMIT ou ROLLBACK. Le mode de validation automatique revient ensuite à son état précédent.
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'utiliser START TRANSACTION
explicitement); c'est du moins ainsi que j'interprète ceci :
Le mode de validation automatique. S'il est défini sur 1, toutes les modifications apportées à une table prennent effet immédiatement. S'il est défini sur 0, vous devez utiliser COMMIT pour accepter une transaction ou ROLLBACK pour l'annuler. Si la validation automatique est 0 et que vous la modifiez à 1, MySQL effectue un COMMIT automatique de toute transaction ouverte. Une autre façon de commencer une transaction consiste à utiliser une instruction START TRANSACTION ou BEGIN. Voir Section 12.3.1, «START TRANSACTION, COMMIT et ROLLBACK Syntax».
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'utiliser BEGIN
ou START TRANSACTION
explicitement de toute façon même si autocommit=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.)