ON DUPLICATE KEY UPDATE
MySQL ON DUPLICATE KEY UPDATE
menyediakan kaedah yang diperkemas untuk melaksanakan kedua-dua operasi sisipan dan kemas kini pada berbilang baris dalam satu pertanyaan. Ini amat berguna apabila berurusan dengan kunci unik, mencegah ralat dan memastikan ketekalan data.
Senario:
Pertimbangkan senario di mana anda perlu memasukkan berbilang baris ke dalam jadual, tetapi beberapa baris mungkin sudah wujud disebabkan nilai kunci unik pendua. Daripada menjana ralat, anda mahu mengemas kini baris sedia ada dengan data baharu.
Contoh:
Katakan anda mempunyai pernyataan SQL berikut yang direka untuk memasukkan beberapa baris ke dalam jadual bernama beautiful
:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29);</code>
Jika name
ialah kunci unik dan beberapa nama sudah wujud, pertanyaan ini akan gagal. Untuk menangani perkara ini, kami menggunakan ON DUPLICATE KEY UPDATE
.
Penyelesaian:
Tambahkan klausa ON DUPLICATE KEY UPDATE
pada pernyataan INSERT
anda:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>
Pertanyaan yang diubah suai ini akan memasukkan baris baharu dengan name
unik. Jika pendua name
ditemui, hanya lajur age
akan dikemas kini kepada nilai yang disediakan dalam klausa VALUES
.
Sintaks Moden (MySQL 8.0.19 dan lebih baru):
MySQL 8.0.19 dan versi yang lebih baru menawarkan pendekatan yang lebih mudah dibaca menggunakan alias:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) AS new ON DUPLICATE KEY UPDATE age = new.age;</code>
Di sini, AS new
memberikan alias kepada baris baharu, membolehkan anda merujuk medannya dengan jelas (cth., new.age
).
Sintaks Lama (versi MySQL sebelum 8.0.19):
Untuk versi MySQL yang lebih lama, kata kunci VALUES
digunakan untuk merujuk kepada nilai yang dimasukkan:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>
Dengan menggunakan ON DUPLICATE KEY UPDATE
, anda boleh mengurus kedua-dua sisipan dan kemas kini dengan cekap dalam satu pernyataan SQL, memudahkan kod anda dan meningkatkan prestasi pangkalan data.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan MySQL ON DUPLICATE KEY UPDATE untuk Sisipan dan Kemas Kini Berbilang Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!