Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menukar Nilai Baris dalam MySQL dengan Kekangan Unik?

Bagaimana untuk menukar Nilai Baris dalam MySQL dengan Kekangan Unik?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 04:23:31250semak imbas

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

Nilai Baris Menukar MySQL dengan Kekangan Unik

Dalam MySQL, menukar nilai keutamaan dua baris dengan kekangan unik pada lajur keutamaan boleh cabaran.

Masalah:

Apabila menggunakan pernyataan ini untuk menukar nilai:

UPDATE tasks 
SET priority = 
CASE
    WHEN priority=2 THEN 3 
    WHEN priority=3 THEN 2 
END 

WHERE priority IN (2,3);

ralat berlaku disebabkan pelanggaran entri pendua kekangan yang unik.

Penyelesaian:

Malangnya, menukar nilai tanpa menggunakan berbilang pertanyaan atau nilai palsu tidak boleh dilakukan dalam MySQL. Ini kerana MySQL menguatkuasakan semakan kekangan selepas setiap kemas kini baris, tidak seperti beberapa DBMS lain.

Pendekatan Alternatif:

Untuk menukar nilai tanpa melanggar kekangan, anda boleh menggunakan langkah berikut dalam urus niaga:

  1. Kemas kini baris dengan nilai palsu: Tetapkan keutamaan satu baris kepada nilai negatif yang tidak wujud (-2), dan baris yang lain kepada satu lagi nilai negatif (-3).
  2. Tukar nilai menggunakan nilai negatif: Tolak nilai palsu (-keutamaan) untuk menukar keutamaan.
  3. Komitasikan transaksi: Untuk menggunakan perubahan secara kekal.

Penyata Transaksi:

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 ;

Nota:

Pendekatan ini memerlukan lajur unik menjadi integer bertanda tanpa nilai negatif. Jika nilai negatif dibenarkan, penyelesaian yang berbeza mungkin diperlukan.

Atas ialah kandungan terperinci Bagaimana untuk menukar Nilai Baris dalam MySQL dengan Kekangan Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn