Masalahnya adalah LAST_INSERT_ID(...);
dengan argumen tidak mengembalikan ID yang dihasilkan melainkan menetapkan nilai yang diberikan dalam "memori" LAST_INSERT_ID()
dan mengembalikannya. Jadi, dalam eksekusi pertama Anda, tidak ada ID yang ditambahkan secara otomatis (Anda memberikan nilainya sendiri) dan LAST_INSERT_ID()
kembalikan 0
. Dalam eksekusi berikut, Anda menyimpan nilai next+1
di penyimpanan internal LAST_INSERT_ID()
, yang mengembalikan nilai. Perilaku ini dijelaskan di MySQL di 12.14 Fungsi Informasi
:
Bahkan, Anda dapat melewati LAST_INSERT_ID()
menelepon dan bekerja tanpa itu.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Ini akan menyisipkan baris (dengan nilai yang diberikan) atau menambah penghitung.
Jika Anda ingin penghitung saat ini untuk tahun dan bulan tertentu, Anda menjalankan pernyataan SELECT sederhana. Ingatlah bahwa Anda mungkin memerlukan transaksi atau penguncian karena klien yang berbeda dapat meningkatkan penghitung sebelum Anda mengambilnya dengan pernyataan SELECT.