Rumah >pangkalan data >tutorial mysql >Bagaimanakah MySQL's INSERT ... ON DUPLICATE KEY UPDATE Boleh Mengendalikan Sisipan dan Kemas Kini Bersyarat?

Bagaimanakah MySQL's INSERT ... ON DUPLICATE KEY UPDATE Boleh Mengendalikan Sisipan dan Kemas Kini Bersyarat?

Barbara Streisand
Barbara Streisandasal
2024-12-13 15:07:10280semak imbas

How Can MySQL's INSERT ... ON DUPLICATE KEY UPDATE Handle Conditional Inserts and Updates?

Menguruskan Pendua dengan Sisipan Bersyarat dan Kemas Kini dalam MySQL

Apabila bekerja dengan pangkalan data, selalunya perlu untuk menangani situasi di mana rekod dengan nilai unik yang sama mungkin perlu sama ada dimasukkan atau dikemas kini. MySQL menyediakan penyelesaian yang mudah untuk senario ini melalui sintaks INSERT ... PADA DUPLICATE KEY UPDATE.

Pertimbangkan situasi yang diterangkan dalam soalan. Seorang pengguna ingin memasukkan data baharu ke dalam jadual AggregatedData. Walau bagaimanapun, mereka mahu data ini dimasukkan hanya jika medan datenum belum wujud dalam jadual. Jika ia wujud, mereka ingin mengemas kini medan Cap Waktu dengan nilai baharu.

Pendekatan awal yang digunakan oleh pengguna melibatkan pernyataan KEMASKINI:

UPDATE AggregatedData SET datenum="734152.979166667", Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";

Walaupun pernyataan ini akan berfungsi jika nilai datenum sudah wujud, ia akan gagal jika nilai tidak terdapat dalam jadual. Untuk mengendalikan situasi ini dengan berkesan, INSERT ... ON DUPLICATE KEY UPDATE akan dimainkan.

Sintaks yang betul untuk operasi ini ialah:

INSERT INTO AggregatedData (datenum, Timestamp)
VALUES ("734152.979166667", "2010-01-14 23:30:00.000")
ON DUPLICATE KEY UPDATE 
  Timestamp=VALUES(Timestamp)

Dalam pernyataan ini:

  • Bahagian INSERT ... cuba memasukkan baris baharu ke dalam jadual dengan yang ditentukan data.
  • Bahagian ON DUPLICATE KEY UPDATE ... menentukan perkara yang perlu dilakukan jika baris dengan nilai datenum yang sama sudah wujud. Dalam kes ini, ia mengemas kini medan Cap Waktu dengan nilai yang disediakan dalam klausa VALUES(Timestamp).

Menggunakan pendekatan ini, pengguna boleh memastikan bahawa data baharu dimasukkan apabila datenum adalah unik dan bahawa data sedia ada dikemas kini apabila datenum adalah pendua. Medan datenum tidak perlu disertakan dalam klausa KEMASKINI kerana ia tidak boleh diubah.

Atas ialah kandungan terperinci Bagaimanakah MySQL's INSERT ... ON DUPLICATE KEY UPDATE Boleh Mengendalikan Sisipan dan Kemas Kini Bersyarat?. 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