Menukar Nilai Lajur dalam MySQL Tanpa Mengubah Struktur Jadual
Seperti yang anda nyatakan, menggunakan KEMASKINI untuk menukar nilai lajur dengan SET X=Y yang mudah , Y=X tidak akan menghasilkan hasil yang diingini. Walau bagaimanapun, terdapat beberapa pendekatan alternatif yang boleh anda pertimbangkan, bergantung pada had data dan kebenaran anda.
Kaedah 1: Pembolehubah Sementara dengan IS NOT NULL Check
Kaedah ini menggunakan pembolehubah sementara untuk memegang nilai satu lajur sambil menukarnya dengan yang lain. Walau bagaimanapun, ia hanya berfungsi apabila kedua-dua nilai bukan NULL.
UPDATE swap_test SET x=y, y=@temp WHERE (@temp:=x) IS NOT NULL;
Kaedah 2: Pembolehubah Sementara Tanpa IS NOT NULL Check
Kaedah yang lebih serba boleh yang mengendalikan kedua-dua nilai NULL dan bukan NULL:
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
Kaedah 3: Kemas Kini Dwi Jadual
Kaedah lain melibatkan penggunaan jadual kedua untuk menukar nilai. Ini memerlukan kunci utama untuk hadir:
UPDATE swap_test s1, swap_test s2 SET s1.x=s1.y, s1.y=s2.x WHERE s1.id=s2.id;
Contoh Ujian
Menggunakan skema ujian yang disediakan:
CREATE TABLE `swap_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `x` varchar(255) DEFAULT NULL, `y` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; INSERT INTO `swap_test` VALUES ('1', 'a', '10'); INSERT INTO `swap_test` VALUES ('2', NULL, '20'); INSERT INTO `swap_test` VALUES ('3', 'c', NULL);
Memohon Kaedah 2 harus berjaya menukar nilai:
UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;
Output:
id x y 1 10 a 2 20 NULL 3 NULL c
Atas ialah kandungan terperinci Bagaimana untuk Bertukar Nilai Lajur dengan Cekap dalam MySQL Tanpa Mengubah Struktur Jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!