Melaksanakan UPSERT dengan Berbilang Lajur Menggunakan INSERT...PADA KEMASKINI KUNCI PENDUA
Untuk melakukan operasi UPSERT (masukkan baris baharu atau kemas kini sedia ada baris) sambil menampung kedua-dua nilai baharu dan sedia ada dalam bahagian kemas kini, INSERT...ON DUPLICATE Kenyataan KEY UPDATE biasanya digunakan. Teknik ini membolehkan anda mengendalikan senario berbeza berdasarkan sama ada rekod dengan kunci utama yang ditentukan wujud atau tidak.
Contoh Mudah
Pertimbangkan jadual bernama Item dengan lajur Item_Name (kunci utama) dan Items_In_Stock yang mengandungi kiraan inventori. Apabila menerima item, logik berikut digunakan:
Pendekatan naif akan melibatkan penggunaan berbilang SELECT kenyataan dalam bahagian KEMASKINI untuk mendapatkan semula kiraan sedia ada, seperti dalam contoh berikut:
INSERT INTO `item` (`item_name`, items_in_stock) VALUES('A', 27) ON DUPLICATE KEY UPDATE `new_items_count` = 27 + (SELECT items_in_stock where item_name = 'A')
Penyelesaian yang Diperbaiki
Walau bagaimanapun, pendekatan ini boleh menjadi rumit yang tidak semestinya. PostgreSQL membolehkan anda merujuk nilai baris yang mencetuskan keadaan ON DUPLICATE KEY secara langsung dalam klausa UPDATE. Oleh itu, anda boleh memudahkan penyataan seperti berikut:
INSERT INTO `item` (`item_name`, items_in_stock) VALUES( 'A', 27) ON DUPLICATE KEY UPDATE `new_items_count` = `new_items_count` + 27
Pernyataan yang dioptimumkan ini mengelakkan overhed pertanyaan SELECT tambahan dan memastikan kod lebih ringkas dan elegan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Operasi UPSERT dengan Berbilang Lajur dalam SQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!