Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

LAST_INSERT_ID () không bằng $ db-> insert_id?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bạn sẽ lưu trữ giờ của một doanh nghiệp như thế nào trong db / model của ứng dụng Rails?

  2. Tạo một truy vấn mysql động bằng cách sử dụng các biến php

  3. Xuất một bảng MySQL lớn dưới dạng nhiều tệp nhỏ hơn

  4. Lấy kinh độ và vĩ độ tương tự từ cơ sở dữ liệu

  5. Cấu hình Spring boot Docker và Mysql