Bagaimana untuk menukar Nilai Baris dalam MySQL dengan Kekangan Unik?

Linda Hamilton
Lepaskan: 2024-10-26 04:23:31
asal
249 orang telah melayarinya

 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);
Salin selepas log masuk

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 ;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!