Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pernyataan MERGE SQL Server Berbanding dengan MySQL ON DUPLICATE KEY UPDATE?

Bagaimanakah Pernyataan MERGE SQL Server Berbanding dengan MySQL ON DUPLICATE KEY UPDATE?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-27 12:08:14446semak imbas

How Does SQL Server's MERGE Statement Compare to MySQL's ON DUPLICATE KEY UPDATE?

Pernyataan MERGE Pelayan SQL: Alternatif Serbaguna kepada ON DUPLICATE KEY KEMASKINI MySQL

Dalam MySQL, klausa ON DUPLICATE KEY UPDATE membenarkan untuk pengubahsuaian baris sedia ada apabila memasukkan data ke dalam jadual dengan indeks UNIK atau KUNCI UTAMA. Walaupun SQL Server tidak mempunyai persamaan yang tepat, pernyataan MERGE menawarkan penyelesaian yang berkuasa dan fleksibel untuk mengendalikan data pendua.

Memperkenalkan Pernyataan MERGE

Pernyataan MERGE menggabungkan kefungsian INSERT dan UPDATE pernyataan ke dalam satu operasi. Ia menilai syarat yang ditentukan untuk menentukan sama ada untuk memasukkan baris baharu atau mengemas kini yang sedia ada. Sintaks untuk pernyataan MERGE asas ialah:

MERGE INTO target_table AS target
USING source_table AS source
ON (target.column_name = source.column_name)
WHEN MATCHED THEN
    UPDATE SET target.column_name = source.column_name
WHEN NOT MATCHED THEN
    INSERT (target.column_names) VALUES (source.column_values)

Contoh Penggunaan

Untuk menggambarkan penggunaan pernyataan MERGE untuk mengendalikan data pendua, pertimbangkan contoh berikut:

MERGE
INTO MyBigDB.dbo.METER_DATA WITH (HOLDLOCK) AS target
USING (SELECT
    77748 AS rtu_id
   ,'12B096876' AS meter_id
   ,56112 AS meter_reading
   ,'20150602 00:20:11' AS time_local) AS source
(rtu_id, meter_id, meter_reading, time_local)
ON (target.rtu_id = source.rtu_id
  AND target.time_local = source.time_local)
WHEN MATCHED
  THEN UPDATE
      SET meter_id = '12B096876'
         ,meter_reading = 56112
WHEN NOT MATCHED
  THEN INSERT (rtu_id, meter_id, meter_reading, time_local)
      VALUES (77748, '12B096876', 56112, '20150602 00:20:11');

Dalam contoh ini, pernyataan MERGE cuba memasukkan baris baharu ke dalam Jadual MyBigDB.dbo.METER_DATA menggunakan data daripada jadual sumber. Jika baris dengan nilai rtu_id dan time_local yang sama sudah wujud, pernyataan mengemas kini baris tersebut dengan nilai yang ditentukan untuk meter_id dan meter_reading. Jika tidak, pernyataan itu memasukkan baris baharu ke dalam jadual.

Kelebihan Pernyataan MERGE

Berbanding klausa ON DUPLICATE KEY UPDATE dalam MySQL, pernyataan MERGE dalam SQL Pelayan menawarkan beberapa kelebihan:

  • Kepelbagaian: Pernyataan MERGE membenarkan operasi kemas kini yang lebih kompleks dengan menyediakan berbilang klausa WHEN MATCHED untuk mengemas kini lajur berbeza berdasarkan keadaan berbeza.
  • Kawalan Concurrency: Pilihan WITH (HOLDLOCK) dalam pernyataan MERGE memastikan bahawa jadual sasaran dikunci semasa operasi, menghalang transaksi serentak lain daripada mengubah suai baris yang terjejas.
  • Kemas Kini Pukal: Penyata MERGE boleh digunakan untuk melaksanakan kemas kini pukal dengan cekap, mengurangkan bilangan pangkalan data perjalanan pergi balik diperlukan untuk manipulasi data yang kompleks.

Atas ialah kandungan terperinci Bagaimanakah Pernyataan MERGE SQL Server Berbanding dengan MySQL ON DUPLICATE KEY UPDATE?. 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