Ketika saya melakukan satu baris INSERT
ke tabel yang memiliki AUTO_INCREMENT
kolom saya ingin menggunakan LAST_INSERT_ID()
fungsi untuk mengembalikan nilai baru yang AUTO_INCREMENT
disimpan untuk baris itu.
Karena banyak Microsoft SQL Server devs dan admin tidak diragukan lagi menyadari fungsi yang setara dalam SQL Server ( SCOPE_IDENTITY
dan @@IDENTITY
) belum tanpa masalah .
Saya tahu status dokumen MySQL:
ID yang dihasilkan dipertahankan di server berdasarkan per koneksi . Ini berarti bahwa nilai yang dikembalikan oleh fungsi ke klien yang diberikan adalah nilai pertama yang
AUTO_INCREMENT
dihasilkan untuk pernyataan terbaru yang memengaruhiAUTO_INCREMENT
kolom oleh klien itu . Nilai ini tidak dapat dipengaruhi oleh klien lain, bahkan jika mereka menghasilkanAUTO_INCREMENT
nilai sendiri. Perilaku ini memastikan bahwa setiap klien dapat mengambil ID sendiri tanpa memperhatikan aktivitas klien lain, dan tanpa perlu kunci atau transaksi.
dan bahkan melangkah lebih jauh dengan mengatakan:
Penggunaan
LAST_INSERT_ID()
danAUTO_INCREMENT
kolom secara simultan dari banyak klien benar-benar valid.
Adakah risiko atau skenario yang diketahui yang dapat menyebabkan LAST_INSERT_ID()
tidak mengembalikan nilai yang benar?
Saya menggunakan MySQL 5.5 pada CentOS 5.5 x64 dan Fedora 16 x64 dan mesin InnoDB.