Rumah  >  Artikel  >  pangkalan data  >  Bagaimana Menukar Nilai Keutamaan Baris dalam MySQL dengan Kekangan Unik?

Bagaimana Menukar Nilai Keutamaan Baris dalam MySQL dengan Kekangan Unik?

Susan Sarandon
Susan Sarandonasal
2024-10-26 16:40:02769semak imbas

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

Menukar Nilai Baris dengan Kekangan Unik dalam MySQL

Soalan:

Bagaimana anda boleh menukar nilai keutamaan dua baris dalam MySQL tanpa melanggar kekangan unik jadual pada lajur keutamaan?

Latar Belakang:

Jadual tugas mempunyai lajur keutamaan dengan unik kekangan, bermakna setiap baris boleh mempunyai nilai unik dalam lajur itu. Apabila mengemas kini baris, MySQL menyemak pelanggaran kekangan unik selepas setiap kemas kini, yang menghalang pertukaran nilai secara langsung.

Penyelesaian:

Malangnya, tidak mungkin untuk menukar nilai baris terus dalam MySQL tanpa melanggar kekangan unik atau menggunakan nilai palsu dan berbilang pertanyaan. Ini disebabkan oleh cara MySQL yang luar biasa dalam memproses kemas kini, yang menguatkuasakan semakan keunikan selepas setiap kemas kini baris dan bukannya selepas penyataan kemas kini selesai.

Walaupun mungkin untuk menyelesaikan isu serupa dengan DBMS lain menggunakan helah seperti ORDER BY , teknik ini tidak berfungsi untuk menukar nilai.

Alternatif:

Dua pendekatan alternatif boleh dipertimbangkan:

  1. NULL atau Nilai Bogus: Gunakan nilai NULL atau nilai palsu yang tidak wujud dalam lajur. Ini memerlukan penggunaan berbilang pertanyaan untuk melengkapkan pertukaran.
  2. Penghapusan Kekangan Sementara: Alih keluar kekangan unik buat sementara waktu, lakukan pertukaran dan tambah semula kekangan. Ini bukan pendekatan yang disyorkan kerana ia boleh membawa kepada isu integriti data.

Contoh (Integer Bertanda dan Tiada Nilai Negatif):

Jika lajur keutamaan ialah integer bertandatangan yang tidak mengandungi nilai negatif, anda boleh menggunakan pertanyaan berikut yang dibungkus dalam transaksi:

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

Atas ialah kandungan terperinci Bagaimana Menukar Nilai Keutamaan 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