Saya membantu pedagang melacak akar penyebab beberapa transaksi pembayaran gagal (selama hari pesanan berat), yang gagal dengan kesalahan berikut
SQLSTATE [23000]: Pelanggaran batasan integritas: 1062 Entri duplikat '51986' untuk kunci 'UNQ_SALES_FLAT_INVOICE_INCREMENT_ID'
The UNQ_SALES_FLAT_INVOICE_INCREMENT_ID
indeks kunci unik pada increment_id
kolom dalam sales_flat_invoice
tabel. Ketika saya melihat tabel ini untuk yang increment_id
disebutkan dalam kesalahan ( 51986
), saya menemukan sudah ada faktur dengan ini increment_id
di sana, dan itu untuk pesanan yang dilakukan oleh pelanggan yang berbeda.
2 pertanyaan saya terkait dengan ini
Di mana di Magento CE 1.9.0.1 adalah ID faktur biasanya dibuat?
Apakah ada masalah yang diketahui dalam persediaan Magento CE 1.9.0.1 dengan coll ID ID untuk pesanan hampir bersamaan?
Saya menyadari ID kenaikan 51986
berarti toko memiliki semacam ekstensi untuk mengubah ID kenaikan diinstal, tapi saya ingin memastikan tidak ada ilmu yang diketahui tanpa ini sebelum pergi terlalu jauh ke jalan itu.
sumber
save()
pemanggilan metode dalam acara pengamat tertentu yang kadang-kadang akan menyebabkan masalah ini - di hari-hari sebelum peninjauan kode;)Jawaban:
Pesan, faktur, kredit, pengiriman EAV hingga 1,6 (?)
Faktur @Prateek ADALAH model EAV dan increment_id masih.
Pembuatan dan masalah Increment_id
ID kenaikan dibuat di sini
Saya akan berasumsi karena dalam metode terakhir transaksi dimulai (dan tabel / baris tidak dikunci) kreasi urutan kedua dapat melewati dan mengambil yang sama yang baru dibuat
increment_id
.Larutan
Saya akan berasumsi, bahwa jika Anda mengunci baris / tabel sebelum membaca, Anda dapat menghindari proses lain yang membaca tabel sampai Anda menulis increment_id baru. Ini mungkin membantu: Bagaimana cara mengunci baris setelah menggunakan load ()?
Tapi saya khawatir, mengunci barisan itu membuat kinerja buruk.
sumber