Rumah >pangkalan data >tutorial mysql >Bagaimana Menukar Nilai Baris dalam MySQL Sambil Menghormati Kekangan Unik?
Menukar Nilai Baris dalam MySQL Tanpa Melanggar Kekangan Unik
Dalam MySQL, selalunya perlu menukar nilai dua baris dalam jadual sambil mengekalkan kekangan unik pada lajur tertentu. Walau bagaimanapun, menggunakan kenyataan UPDATE biasa dengan klausa CASE boleh mengakibatkan ralat masukan pendua jika kekangan unik dilanggar.
Isunya
Masalah timbul kerana MySQL memproses kemas kini baris demi baris, menyemak pelanggaran kekangan unik selepas setiap perubahan. Dalam contoh yang disediakan:
UPDATE tasks SET priority = CASE WHEN priority=2 THEN 3 WHEN priority=3 THEN 2 END WHERE priority IN (2,3);
MySQL mengemas kini baris pertama dengan keutamaan 2 kepada keutamaan 3. Walau bagaimanapun, apabila ia cuba mengemas kini baris kedua dengan keutamaan 3 kepada keutamaan 2, ia menghadapi pelanggaran kerana 3 sudah wujud sebagai nilai unik.
Penyelesaian
Malangnya, adalah tidak mungkin untuk mencapai pertukaran nilai baris dalam MySQL tanpa menggunakan nilai palsu atau berbilang pertanyaan. Ini disebabkan oleh tingkah laku pemprosesan kekangan MySQL yang unik.
Untuk menyelesaikan pengehadan ini, seseorang boleh menggunakan pendekatan dua pernyataan berikut yang dibungkus dalam 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 ;
Pendekatan ini menukar nilai secara berkesan dengan memberikan nilai negatif sebagai pemegang tempat sementara. Dalam urus niaga, MySQL menganggap kemas kini sebagai satu operasi, menghalang pelanggaran kekangan unik.
Atas ialah kandungan terperinci Bagaimana Menukar Nilai Baris dalam MySQL Sambil Menghormati Kekangan Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!