Vấn đề là LAST_INSERT_ID(...);
với một đối số không trả về ID đã tạo mà thay vào đó đặt giá trị đã cho trong "bộ nhớ" của LAST_INSERT_ID()
và trả lại nó. Vì vậy, trong lần thực thi đầu tiên của bạn, không có ID tăng tự động nào được tạo (bạn đã tự cung cấp giá trị) và LAST_INSERT_ID()
trả về 0
. Trong các lần thực thi sau, bạn lưu giá trị next+1
trong bộ nhớ trong của LAST_INSERT_ID()
, trả về giá trị. Hành vi này được mô tả trong MySQL trong 12.14 Chức năng Thông tin
:
Trên thực tế, bạn có thể bỏ qua LAST_INSERT_ID()
gọi và làm việc mà không cần nó.
INSERT INTO
officeRechNr (jahr,monat,zahl)
VALUES
(?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1
Thao tác này sẽ chèn hàng (với giá trị đã cho) hoặc tăng bộ đếm.
Nếu bạn muốn bộ đếm hiện tại cho một năm và tháng nhất định, bạn chạy một câu lệnh SELECT đơn giản. Lưu ý rằng bạn có thể cần giao dịch hoặc khóa vì một khách hàng khác có thể tăng bộ đếm trước khi bạn tìm nạp nó bằng câu lệnh SELECT.