Ok, jadi katakanlah saya sedang melakukan mysql INSERT
ke salah satu tabel saya dan tabel tersebut memiliki kolom item_id
yang diatur ke autoincrement
dan primary key
.
Bagaimana cara mendapatkan kueri untuk menampilkan nilai kunci primer yang baru dibuat item_id
dalam kueri yang sama?
Saat ini saya menjalankan kueri kedua untuk mengambil id tetapi ini sepertinya bukan praktik yang baik mengingat ini mungkin menghasilkan hasil yang salah ...
Jika ini tidak memungkinkan, apa praktik terbaik untuk memastikan saya mendapatkan id yang benar?
mysql
insert
key
auto-increment
Amy Neville
sumber
sumber
INSERT
permintaan seperti itu; mengapa Anda berpikir itu mungkin menghasilkan hasil yang salah?Jawaban:
Anda harus menggunakan
LAST_INSERT_ID()
fungsi: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-idMisalnya:
Ini akan mengembalikan
PRIMARY KEY
nilai baris terakhir yang Anda masukkan:Jadi nilai yang dikembalikan oleh
LAST_INSERT_ID()
adalah per pengguna dan tidak terpengaruh oleh kueri lain yang mungkin berjalan di server dari pengguna lain .sumber
PRIMARY KEY
nilai baris terakhir yang Anda masukkan, karena per koneksi - setiap koneksi ke server akan mempertahankan nilainya sendiri untuk ini. Saya telah memperbarui jawaban untuk memperjelas ini.WASPADALAH !! dari "LAST_INSERT_ID ()" jika mencoba mengembalikan nilai kunci utama ini dalam PHP.
Saya tahu utas ini bukan tag php, tetapi bagi siapa pun yang menemukan jawaban ini ingin mengembalikan id penyisipan MySQL dari sisipan skrip PHP menggunakan panggilan mysql_query standar - tidak akan berfungsi dan tidak jelas tanpa menangkap kesalahan SQL.
Mysqli yang lebih baru mendukung banyak kueri - yang LAST_INSERT_ID () sebenarnya adalah kueri kedua dari yang asli.
IMO SELECT terpisah untuk mengidentifikasi kunci primer terakhir lebih aman daripada fungsi mysql_insert_id () opsional yang mengembalikan ID AUTO_INCREMENT yang dihasilkan dari operasi INSERT sebelumnya.
sumber
LAST_INSERT_ID
adalah fungsi MySQL per-koneksi. Jika Anda meminta ID sisipan terakhir, ada kemungkinan koneksi yang terpisah akan melakukan penulisan dan Anda akan memiliki ID yang salah.mysql_insert_id()
juga berfungsi atas dasar per koneksi, tetapi juga menderita perilaku aneh seperti yang terlihat di sini stackoverflow.com/a/897374/1305910 dalam komentar oleh Cliffordlife - tidak pernah kita semua seharusnya menggunakanmysqli
Dari
LAST_INSERT_ID()
dokumentasi:Itu adalah jika Anda memiliki dua permintaan terpisah untuk skrip secara bersamaan, mereka tidak akan memengaruhi satu sama lain
LAST_INSERT_ID()
(kecuali jika Anda menggunakan koneksi persisten mungkin).sumber
Di sini apa yang Anda cari !!!
Ini adalah alternatif
SCOPE_IDENTITY()
fungsi terbaik yang digunakan diSQL Server
.Anda juga harus ingat bahwa ini hanya akan berfungsi jika
Last_INSERT_ID()
dipecat mengikutiInsert
permintaan Anda . Itu adalah permintaan mengembalikan id yang dimasukkan dalam skema. Anda tidak bisa mendapatkan id yang dimasukkan terakhir pada tabel tertentu.Untuk perincian lebih lanjut, silakan buka tautan Setara dengan fungsi SQLServer SCOPE_IDENTITY () di mySQL?
sumber
Jika Anda membutuhkan nilai sebelum menyisipkan baris:
Anda dapat menggunakan ini di sisipan:
sumber
Anda akan menerima parameter ini pada hasil permintaan Anda:
The
insertId
adalah apa yang Anda butuhkan.(NodeJS-mySql)
sumber
Jika dalam python menggunakan pymysql, dari kursor Anda dapat menggunakan cursor.lastrowid
sumber
cukup gunakan "$ last_id = mysqli_insert_id ($ conn);"
sumber
Jika Anda menggunakan PHP: Pada objek PDO Anda dapat dengan mudah memanggil metode lastInsertId setelah Anda memasukkan.
Kalau tidak, dengan LAST_INSERT_ID Anda bisa mendapatkan nilai seperti ini:
SELECT LAST_INSERT_ID();
sumber
saya digunakan
return $this->db->insert_id();
untuk Codeignitersumber
Saya hanya ingin berbagi pendekatan saya dalam hal ini di PHP, beberapa dari Anda mungkin menemukan itu bukan cara yang efisien tetapi ini adalah 100 lebih baik daripada opsi lain yang tersedia.
buat kunci acak dan masukkan ke dalam tabel yang membuat baris baru. maka Anda dapat menggunakan kunci itu untuk mengambil kunci utama. gunakan pembaruan untuk menambahkan data dan melakukan hal-hal lain.
melakukan cara ini membantu mengamankan satu baris dan memiliki kunci primer yang benar.
Saya benar-benar tidak merekomendasikan ini kecuali Anda tidak memiliki opsi lain.
sumber