ubuntuusers.de

auto rollback oder commit bei mysql befehl

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

MattX

Anmeldungsdatum:
27. Februar 2009

Beiträge: 47

Hallo!
Ich habe ein dringendes Problem mit einer MySQL Anweisung.
Besteht die Möglichkeit ein auto rollback oder commit zu erzeugen? Also jenachdem ob das einspielen der Daten fehlgeschlagen oder funktioniert hat?
folgenden Befehl führe ich aus

1
mysql --user=root --password=password db < update.sql

darin enthalten sind in der ersten Zeile eine Start Transaction sowie am Schluss ein commit;
der mysql befehl kommt in ein bash script welches automatisch zu bestimmten zeiten laufen soll. anschließen wird eine mail erzeugt welche sagt ob es funkioniert hat oder nicht.
wie bekomm ich es denn hin das er automatisch ein rollback macht sobald ein error ausgeworfen wird

MattX

(Themenstarter)

Anmeldungsdatum:
27. Februar 2009

Beiträge: 47

konnte das problem lösen. folgender code wurde dafür benutzt

1
2
3
4
5
6
7
mysql --user=root --password=password database < update.sql >error.txt 2>&1
ergebnis=$(wc -l error.txt | awk '{print $1}')
if [ $ergebnis -gt 0 ]; then
	mysql --user=root --password=password database -e "rollback;"
else 
	mysql --user=root --password=password database -e "commit;"
fi

erste zeile der update.sql:

1
2
START TRANSACTION;
...

wittiko

Anmeldungsdatum:
17. Juli 2011

Beiträge: 8

Brauchst du es nur bei bestimmten SQL Anweisungen oder generell?

Wenn du es immer brauchst würde ich dir empfehlen gleich in der Mysql config folgendes einzutragen:

1
init_connect='SET autocommit=0'

Wenn du aber nur für einen Connection das autocommit deaktivieren willst einfach:

SET autocommit=0

MattX

(Themenstarter)

Anmeldungsdatum:
27. Februar 2009

Beiträge: 47

hab ich auch schon dran gedacht jedoch soll es nur für eine connection benutzt werden.
das script wird per cron gestartet und somit sieht ja keiner obs funktioniert hat oder nicht.
daher das problem das automatisch ausgewählt werden sollte ob commit oder rollback

wenn jemanden noch ne bessere lösung als meine eigene einfällt, immer her damit ☺

ansonsten funktioniert es mit meinem weg erstmal. die zeit wird zeigen wie gut 😉

Antworten |