Bagaimana Menukar Nilai Keutamaan Baris dalam MySQL dengan Kekangan Unik?

Susan Sarandon
Lepaskan: 2024-10-26 16:40:02
asal
768 orang telah melayarinya

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

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!

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!