Heim >Datenbank >MySQL-Tutorial >Wie tausche ich Zeilenwerte in MySQL mit einer eindeutigen Einschränkung aus?
MySQL tauscht Zeilenwerte mit eindeutiger Einschränkung aus
In MySQL kann der Austausch von Prioritätswerten zweier Zeilen mit einer eindeutigen Einschränkung für die Prioritätsspalte erfolgen eine Herausforderung.
Problem:
Bei Verwendung dieser Anweisung zum Austauschen von Werten:
UPDATE tasks SET priority = CASE WHEN priority=2 THEN 3 WHEN priority=3 THEN 2 END WHERE priority IN (2,3);
ein Fehler tritt aufgrund einer doppelten Eintragsverletzung von auf die Eindeutigkeitsbeschränkung.
Lösung:
Leider ist das Austauschen von Werten ohne die Verwendung mehrerer Abfragen oder gefälschter Werte in MySQL nicht möglich. Dies liegt daran, dass MySQL im Gegensatz zu einigen anderen DBMS eine Einschränkungsprüfung nach jeder Zeilenaktualisierung erzwingt.
Alternativer Ansatz:
Um Werte auszutauschen, ohne die Einschränkung zu verletzen, können Sie die verwenden Befolgen Sie die folgenden Schritte innerhalb einer Transaktion:
Transaktionserklärung:
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 ;
Hinweis:
Dieser Ansatz erfordert, dass die eindeutige Spalte eine vorzeichenbehaftete Ganzzahl ohne negative Werte ist. Wenn negative Werte zulässig sind, kann eine andere Lösung erforderlich sein.
Das obige ist der detaillierte Inhalt vonWie tausche ich Zeilenwerte in MySQL mit einer eindeutigen Einschränkung aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!