Heim >Datenbank >MySQL-Tutorial >Wie tausche ich Zeilenwerte in MySQL mit einer eindeutigen Einschränkung aus?

Wie tausche ich Zeilenwerte in MySQL mit einer eindeutigen Einschränkung aus?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 04:23:31316Durchsuche

 How to Swap Row Values in MySQL with a Unique Constraint?

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:

  1. Zeilen mit falschen Werten aktualisieren:Setzen Sie die Priorität einer Zeile auf einen nicht vorhandenen negativen Wert (-2) und der anderen Zeile auf ein weiterer negativer Wert (-3).
  2. Werte mit negativen Werten tauschen:Die falschen Werte (-priority) negieren, um die Prioritäten auszutauschen.
  3. Commit the Transaktion:Um die Änderungen dauerhaft anzuwenden.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn