2013-04-28 5 views
4

J'ai une question à propos de MySQL et n'ai pas trouvé de réponse. Je sais que la validation automatique est activée par défaut dans MySQL. J'ai besoin de lancer quelques requêtes de mise à jour depuis la ligne de commande en une seule transaction mais je ne sais pas comment MySQL les traitera. Si j'ai quelque chose comme ceci:Ligne de commande et transactions MySQL

mysql -uroot -proot -e 'QUERY 1; QUERY 2; QUERY3' 

va l'exécuter comme une seule transaction ou sera auto-commit MySQL chaque instruction de façon individuelle? Je dois assurer l'atomicité.

Répondre

7

Vous pouvez utiliser la syntaxe de MySQL START TRANSACTION pour créer un commettras transactionnel:

Source: http://dev.mysql.com/doc/refman/5.0/en/commit.html

START TRANSACTION; 
SELECT @A:=SUM(salary) FROM table1 WHERE type=1; 
UPDATE table2 SET [email protected] WHERE type=1; 
COMMIT; 

Vous pouvez aussi écrire votre requête dans un fichier sql, et le tuyau dans mysql:

$ cat query.sql | mysql -uroot -proot 
2

Pipe est une excellente idée!

echo "START TRANSACTION;" > start.sql 
echo "COMMIT;" > commit.sql 

cat start.sql yourScript.sql commit.sql | mysql -uroot -proot 

ou

cat start.sql yourScript.sql - | mysql -uroot -proot 

et ainsi, vous pouvez vous engager o rollback à la main selon le résultat de yourScript

Bonne chance!