Permohonan saya mungkin memasukkan data kunci utama pendua, keraguan saya ialah apakah cara yang paling berkesan, untuk menyemak sama ada kunci itu sudah wujud sebelum memasukkan, atau hanya memasukkan dan biarkan bank mengembalikan ralat dan kemudian mengendalikannya? Yang manakah mempunyai kesan yang kurang? Terima kasih
Cara paling berkesan ialah menggunakan pertanyaan dengan
ON DUPLICATE KEY UPDATE
子句的INSERT
.Jika kunci utama tidak wujud, ini akan memasukkan rekod baharu; jika kunci utama sudah wujud, hanya medan yang ditentukan bagi rekod kunci utama akan dikemas kini (tiada ralat akan dibuang).
Sebagai contoh, jika
user_id
不存在,以下代码将创建一个新用户。如果user_id
确实存在,它只会更新last_visited_date
.Pendekatan ini membolehkan anda mencipta rekod baharu dan mengemas kini rekod sedia ada dengan satu pertanyaan, menghapuskan keperluan untuk menyemak kunci utama sedia ada.
Nota: Jika kunci utama ialah indeks kenaikan automatik, MySQL akan
ON DUPLICATE UPDATE
子句视为与INSERT
查询相同,因此下一个 ID 将增加 1 selagi kunci utama sudah wujud.Jika anda tidak mahu menggunakan klausa
ON DUPLICATE KEY UPDATE
, menangkap ralat pada kunci utama sedia ada akan menjadi pendekatan yang paling berprestasi.