Intinya bukan jika situasi buruk yang potensial mungkin terjadi. Intinya adalah jika mereka mungkin. Selama ada kemungkinan non-sepele masalah yang terjadi, jika diketahui itu harus dihindari.
Ini tidak seperti yang kita bicarakan tentang mengubah panggilan fungsi satu baris menjadi monster 5000 baris untuk menangani kasus tepi yang memungkinkan dari jarak jauh. Kita berbicara tentang mempersingkat panggilan menjadi penggunaan yang lebih mudah dibaca dan lebih benar.
Saya agak setuju dengan @Mark Baker bahwa ada beberapa pertimbangan kinerja, tetapi karena id
adalah kunci utama, MAX
permintaan akan sangat cepat. Tentu, LAST_INSERT_ID()
akan lebih cepat (karena hanya membaca dari variabel sesi), tetapi hanya dengan jumlah yang sepele.
Dan Anda tidak perlu banyak pengguna untuk ini terjadi. Yang Anda butuhkan hanyalah banyak permintaan bersamaan (bahkan tidak sebanyak itu). Jika waktu antara mulai dari sisipan dan awal pilih adalah 50 milidetik (dengan asumsi mesin DB aman transaksi), maka Anda hanya perlu 20 permintaan per detik untuk mulai memukul masalah dengan ini secara konsisten. Intinya adalah bahwa jendela untuk kesalahan tidak sepele. Jika Anda mengatakan 20 permintaan per detik (yang pada kenyataannya tidak banyak), dan dengan asumsi bahwa rata-rata orang mengunjungi satu halaman per menit, Anda hanya berbicara 1200 pengguna. Dan itu terjadi secara teratur. Itu bisa terjadi sekali dengan hanya 2 pengguna.
Dan langsung dari dokumentasi MySQL di subjek :
You can generate sequences without calling LAST_INSERT_ID(), but the utility of
using the function this way is that the ID value is maintained in the server as
the last automatically generated value. It is multi-user safe because multiple
clients can issue the UPDATE statement and get their own sequence value with the
SELECT statement (or mysql_insert_id()), without affecting or being affected by
other clients that generate their own sequence values.