MySQL: Kesukaran dengan LIMIT dalam Kemas Kini Berbilang Baris
Dalam MySQL, cuba mengemas kini berbilang baris menggunakan klausa LIMIT boleh menghadapi ralat. Pertimbangkan pertanyaan berikut:
UPDATE messages SET test_read=1 WHERE userid='xyz' ORDER BY date_added DESC LIMIT 5, 5;
Pertanyaan ini bertujuan untuk mengemas kini lima baris berdasarkan syarat yang disediakan, melangkau lima baris pertama (LIMIT 5, 5). Walau bagaimanapun, ini mengakibatkan ralat.
Versi pertanyaan yang berfungsi tanpa klausa LIMIT kedua (LIMIT 5) berjaya mengemas kini lima baris pertama yang memenuhi syarat. Ralat berlaku kerana MySQL tidak membenarkan menyatakan LIMIT kedua dalam pernyataan kemas kini.
Alternatif Disyorkan
Untuk mengatasi had ini, penyelesaian disyorkan:
UPDATE messages SET test_read=1 WHERE id IN ( SELECT id FROM ( SELECT id FROM messages ORDER BY date_added DESC LIMIT 5, 5 ) tmp );
Pertanyaan ini mencapai hasil yang sama dengan terlebih dahulu mengenal pasti baris yang dikehendaki menggunakan subkueri dan kemudian mengemas kini baris yang sesuai berdasarkan medan id. Kaedah ini membolehkan pemilihan baris yang tepat dan pengemaskinian dalam MySQL.
Atas ialah kandungan terperinci Mengapa Pernyataan `KEMASKINI` MySQL Tidak Menyokong Klausa `LIMIT` Dua Bahagian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!