Einzelnen Beitrag anzeigen

Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#9

Re: Dreieckstausch? (Daten 2er Datensätze vertauschen)

  Alt 28. Jul 2009, 15:31
Zitat von DeddyH:
[..]zumal ich auch nicht weiß, um welches DBMS es hier geht.[..]
Zitat von MatthiasR:
[..]Bei mir kommt PostgreSQL zum Einsatz[..]
Zitat von DeddyH:
http://stackoverflow.com/questions/484040/swapping-the-2-rows-in-ms-sql-server-retaining-the-original-primary-key-and-witho#484787
Dieses Beispiel ist ähnlich wie das IF-Konstrukt in meinem Beitrag oben: Es funtkioniert nur, wenn der Wert, der geändert werden soll kein Unique key hat. Oder habe ich da was übersehen?

Eine Stored Procedure für den Fall würde zwar die Komplexität woanders hin verlegen und die Abfrage auch beschleunigen, wenn das DBMS über ein Netzwerk angesprochen wird, da weniger Daten verschoben werden müssen. Aber das eigentliche Problem löst es wohl nicht, da auch hier immer nur Zugriff auf eine Zeile auf mal besteht und somit der unique key auf jeden Fall blockiert. Der Unique key lässt sich auch nicht temporär deaktivieren (zumindest in mysql) (bzw. nur mit ALTER TABLE DROP KEY ... Was entsprechend dauern kann und sowieso eher ähm... zu Problemen anderswo führen kann.

EDIT: Natürlich kann die Version mit dem temporären Wert auch Probleme verusachen. Was ist wenn zwei Threads gleichzeitig den gleichen temporären Wert nutzen wollen um zwei Zeilen zu tauschen. Dank Transaktionen würde das Ergebnis zwar nicht willkürlich sein, aber was macht das DBMS in einer solchen Situation? Lockt der zweite Thread solange, bsi der erste fertig ist, oder wird direkt zurückgerollt? Das könnte DBMS spezifisch sein...
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat