Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Melakukan Kemas Kini Bersyarat dalam INSERT ... PADA Penyata KEMASKINI KUNCI DUA?

Bagaimana untuk Melakukan Kemas Kini Bersyarat dalam INSERT ... PADA Penyata KEMASKINI KUNCI DUA?

DDD
DDDasal
2024-10-30 22:46:29345semak imbas

How to Perform Conditional Updates in INSERT ... ON DUPLICATE KEY UPDATE Statements?

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!

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