Rumah >pangkalan data >tutorial mysql >KEMASKINI MySQL dengan CASE: Mengapa Ia Mengemas kini Semua Baris dan Bagaimana untuk Membetulkannya?

KEMASKINI MySQL dengan CASE: Mengapa Ia Mengemas kini Semua Baris dan Bagaimana untuk Membetulkannya?

Susan Sarandon
Susan Sarandonasal
2024-12-01 07:52:14289semak imbas

MySQL UPDATE with CASE: Why Does it Update All Rows and How to Fix It?

Kemas Kini MySQL dengan CASE: Tingkah Laku dan Penyelesaian Tidak Dijangka

Apabila menggunakan pernyataan CASE dalam pertanyaan MySQL UPDATE, adalah penting untuk memahami kesannya terhadap data. Dalam contoh yang disediakan, pertanyaan asal bertujuan untuk mengemas kini baris tertentu berdasarkan medan id mereka. Walau bagaimanapun, pertanyaan mengemas kini semua 25 juta baris secara mengejut, memperkenalkan nilai NULL.

Tingkah laku ini berpunca daripada sifat pernyataan CASE. Tanpa klausa ELSE, MySQL mentafsir sebarang syarat yang hilang sebagai menyamai NULL. Oleh itu, semua baris yang tidak sepadan dengan nilai id yang ditentukan telah dikemas kini dengan NULL untuk lajur uid.

Untuk menyelesaikan isu ini dan mengemas kini baris tertentu secara selektif sambil mengekalkan data lain, pertimbangkan untuk menggunakan klausa ELSE untuk menyediakan lalai nilai atau mengekalkan nilai sedia ada. Selain itu, nyatakan baris yang perlu dikemas kini menggunakan klausa WHERE.

Sebagai contoh, pertanyaan diubah suai berikut menangani kebimbangan ini:

UPDATE `table` SET `uid` = CASE
    WHEN id = 1 THEN 2952
    WHEN id = 2 THEN 4925
    WHEN id = 3 THEN 1592
    ELSE `uid`
    END
WHERE id  in (1,2,3)

Pertanyaan ini kini mengemas kini hanya baris dengan nilai id daripada 1, 2, dan 3, meninggalkan baris yang selebihnya tidak terjejas. Dengan menggabungkan pernyataan CASE dengan klausa ELSE dan klausa WHERE, anda boleh mengemas kini baris tertentu dengan cekap tanpa mengubah suai data lain dalam jadual secara tidak sengaja.

Atas ialah kandungan terperinci KEMASKINI MySQL dengan CASE: Mengapa Ia Mengemas kini Semua Baris dan Bagaimana untuk Membetulkannya?. 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