Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Tukar Nilai dalam MySQL tanpa Pelanggaran Kekangan Unik?

Bagaimana untuk Tukar Nilai dalam MySQL tanpa Pelanggaran Kekangan Unik?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 05:07:31251semak imbas

How to Swap Values in MySQL without Unique Constraint Violations?

Menukar Nilai dalam MySQL tanpa Pelanggaran Kekangan Unik

Dalam MySQL, menukar nilai antara dua baris boleh mencabar apabila kekangan unik digunakan untuk lajur yang terjejas. Isu ini timbul kerana MySQL menguatkuasakan semakan kekangan selepas setiap kemas kini baris, dan bukannya penyiapan keseluruhan pernyataan.

Untuk menangani had ini, pertimbangkan penyelesaian berikut:

<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>

Dalam penyelesaian ini , transaksi dimulakan untuk memastikan kedua-dua kemas kini dilakukan secara atom. Nilai negatif diberikan buat sementara waktu kepada keutamaan untuk mengelakkan konflik dengan kekangan unik. Selepas itu, kemas kini lain memberikan nilai negatif kepada keutamaan asal, menukar nilainya dengan berkesan.

Sebagai alternatif, jika nilai negatif tidak dibenarkan dalam lajur keutamaan, anda boleh menggunakan pembolehubah sementara atau mencipta jadual sementara untuk menyimpan bertukar nilai. Walau bagaimanapun, kaedah ini mungkin melibatkan berbilang pertanyaan.

Adalah penting untuk ambil perhatian bahawa mengalih keluar kekangan unik buat sementara waktu tidak disyorkan, kerana ia boleh menjejaskan integriti data.

Atas ialah kandungan terperinci Bagaimana untuk Tukar Nilai dalam MySQL tanpa Pelanggaran 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