Werte von Zeilen mit eindeutigen Einschränkungen in MySQL austauschen
Frage:
Wie können Sie die Prioritätswerte zweier Zeilen in MySQL vertauschen, ohne die Eindeutigkeitsbeschränkung der Tabelle für die Prioritätsspalte zu verletzen?
Hintergrund:
Die Aufgabentabelle hat eine Prioritätsspalte mit einer Eindeutigkeit Einschränkung, was bedeutet, dass jede Zeile in dieser Spalte einen eindeutigen Wert haben kann. Bei der Aktualisierung von Zeilen prüft MySQL nach jeder Aktualisierung, ob eindeutige Einschränkungsverletzungen vorliegen, was den direkten Austausch von Werten verhindert.
Lösung:
Leider ist es nicht möglich, Werte von auszutauschen Zeilen direkt in MySQL, ohne die Eindeutigkeitsbeschränkung zu verletzen oder falsche Werte und mehrere Abfragen zu verwenden. Dies liegt an der ungewöhnlichen Art und Weise von MySQL, Aktualisierungen zu verarbeiten, die Eindeutigkeitsprüfungen nach jeder Zeilenaktualisierung erzwingt, anstatt nach Abschluss der Aktualisierungsanweisung.
Während es möglich sein kann, ähnliche Probleme mit anderen DBMS mithilfe von Tricks wie ORDER BY zu lösen , diese Technik funktioniert nicht zum Austauschen von Werten.
Alternativen:
Zwei alternative Ansätze können in Betracht gezogen werden:
Beispiel (Vorzeichenbehaftete Ganzzahl und keine negativen Werte):
Wenn die Prioritätsspalte eine Ganzzahl mit Vorzeichen ist, die keine negativen Werte enthält, können Sie die folgende Abfrage verwenden, die in eine Transaktion eingebunden ist:
<code class="sql">START TRANSACTION ; UPDATE tasks SET priority = CASE WHEN priority = 2 THEN -3 WHEN priority = 3 THEN -2 END WHERE priority IN (2,3) ; UPDATE tasks SET priority = - priority WHERE priority IN (-2,-3) ; COMMIT ;</code>
Das obige ist der detaillierte Inhalt vonWie tausche ich Zeilenprioritätswerte in MySQL mit einer eindeutigen Einschränkung aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!