INSERT ... PADA KEMASKINI KUNCI DUA: Kemas Kini Bersyarat
Apabila melakukan INSERT ... PADA operasi KEMASKINI KUNCI DUA, ia adalah kadangkala perlu untuk melaksanakan kemas kini secara bersyarat berdasarkan syarat tertentu. Walau bagaimanapun, klausa WHERE tidak dibenarkan dengan bahagian KEMASKINI kenyataan ini.
Penyelesaian Menggunakan IF()
Untuk mencapai kemas kini bersyarat, satu penyelesaian adalah dengan menggunakan fungsi IF(). Dengan menilai keadaan dalam ungkapan IF(), anda boleh menentukan nilai yang berbeza untuk lajur yang dikemas kini berdasarkan hasil.
Contoh
Pertimbangkan jadual berikut:
CREATE TABLE daily_events ( created_on DATE, last_event_id INT, last_event_created_at DATETIME );
Untuk mengemas kini lajur last_event_id secara bersyarat hanya jika lajur_event_created_at telah berubah, anda boleh menggunakan pertanyaan berikut:
INSERT INTO daily_events (created_on, last_event_id, last_event_created_at) VALUES ('2010-01-19', 23, '2010-01-19 10:23:11') ON DUPLICATE KEY UPDATE last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);
Dalam pertanyaan ini, fungsi IF() menyemak sama ada nilai last_event_created_at dalam pangkalan data adalah kurang daripada nilai yang dimasukkan. Jika benar, last_event_id dikemas kini kepada nilai yang dimasukkan; jika tidak, nilai sedia ada dikekalkan.
Keserasian Replikasi
Pendekatan ini serasi dengan replikasi, kerana ia tidak melibatkan sebarang pertanyaan tambahan atau pengubahsuaian pada skema pangkalan data.
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Kemas Kini Bersyarat dalam INSERT ... PADA Penyata KEMASKINI KUNCI DUA?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!