Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengemas Kini Rekod Sedia Ada Dengan Ringkas Apabila Memasukkan dengan Kekunci Unik Bercanggah?
Apabila bekerja dengan pangkalan data, selalunya wajar untuk mengemas kini rekod sedia ada apabila cuba memasukkan yang baharu dengan kekunci unik yang bercanggah . Di sinilah klausa "KEMASKINI KUNCI PENDUPLICATE" berguna.
Situasi
Andaikan anda mempunyai jadual dengan indeks unik pada medan "id" dan anda ingin memasukkan rekod baharu sambil memastikan bahawa jika id sudah wujud, rekod yang sepadan adalah dikemas kini.
Pendekatan Konvensional
Pendekatan konvensional melibatkan penetapan semua nilai medan dalam klausa KEMASKINI, seperti yang ditunjukkan di bawah:
INSERT INTO table (id, a, b, c, d, e, f, g) VALUES (1, 2, 3, 4, 5, 6, 7, 8) ON DUPLICATE KEY UPDATE a=2, b=3, c=4, d=5, e=6, f=7, g=8;
Ini pendekatan berfungsi dengan baik tetapi boleh menjadi verbose jika anda mempunyai sejumlah besar lajur.
Alternatif Ringkas
Untuk memudahkan klausa KEMASKINI, anda boleh menggunakan kata kunci "VALUES" untuk menentukan nilai baharu bagi medan yang dikemas kini. Ini menghapuskan keperluan untuk mengulang nama lajur:
INSERT INTO table (id, a, b, c, d, e, f, g) VALUES (1, 2, 3, 4, 5, 6, 7, 8) ON DUPLICATE KEY UPDATE a=VALUES(a), b=VALUES(b), c=VALUES(c), d=VALUES(d), e=VALUES(e), f=VALUES(f), g=VALUES(g);
Pendekatan ini lebih ringkas dan masih mencapai hasil yang sama.
Mendapatkan ID Terakhir yang Disisipkan
Jika anda perlu mendapatkan semula ID rekod yang baru dimasukkan atau dikemas kini, anda boleh menggunakan kaedah khusus bahagian belakang yang disediakan oleh pangkalan data atau rangka kerja anda. Contohnya, dalam LuaSQL, anda boleh menggunakan fungsi "conn:getlastautoid()" untuk mengambil ID yang dijana secara automatik yang terakhir.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengemas Kini Rekod Sedia Ada Dengan Ringkas Apabila Memasukkan dengan Kekunci Unik Bercanggah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!