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!