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

Làm thế nào tồi tệ bằng cách sử dụng SELECT MAX (id) trong MYSQL thay vì mysql_insert_id () trong PHP?

Vấn đề là không nên nếu các tình huống xấu tiềm ẩn có thể xảy ra. Vấn đề là nếu họ có thể. Miễn là có một xác suất không nhỏ về sự cố xảy ra, nếu nó được biết thì nên tránh.

Nó không giống như chúng ta đang nói về việc thay đổi một lệnh gọi hàm một dòng thành một con quái vật 5000 dòng để đối phó với một trường hợp cạnh có thể xảy ra từ xa. Chúng ta đang nói về việc thực sự rút ngắn cuộc gọi thành cách sử dụng dễ đọc hơn và đúng đắn hơn.

Tôi đồng ý với @Mark Baker rằng có một số cân nhắc về hiệu suất, nhưng vì id là khóa chính, MAX truy vấn sẽ rất nhanh chóng. Chắc chắn rồi, LAST_INSERT_ID() sẽ nhanh hơn (vì nó chỉ đọc từ một biến phiên), nhưng chỉ với một số lượng nhỏ.

Và bạn không cần nhiều người dùng để điều này xảy ra. Tất cả những gì bạn cần là nhiều yêu cầu đồng thời (thậm chí không nhiều như vậy). Nếu thời gian giữa bắt đầu của phần chèn và thời gian bắt đầu lựa chọn là 50 mili giây (giả sử công cụ DB an toàn cho giao dịch), thì bạn chỉ cần 20 yêu cầu mỗi giây để bắt đầu khắc phục sự cố với điều này một cách nhất quán. Vấn đề là cửa sổ lỗi không phải là nhỏ. Nếu bạn nói 20 yêu cầu mỗi giây (thực tế là không nhiều) và giả sử rằng một người trung bình truy cập một trang mỗi phút, bạn chỉ nói 1200 người dùng. Và đó là điều để nó diễn ra thường xuyên. Nó có thể xảy ra một lần với chỉ 2 người dùng.

Và ngay từ Tài liệu MySQL về chủ đề :

You can generate sequences without calling LAST_INSERT_ID(), but the utility of 
using the function this way is that the ID value is maintained in the server as 
the last automatically generated value. It is multi-user safe because multiple 
clients can issue the UPDATE statement and get their own sequence value with the
SELECT statement (or mysql_insert_id()), without affecting or being affected by 
other clients that generate their own sequence values.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL so với JSON - Tại sao?

  2. nhập tệp sql vào cơ sở dữ liệu bằng wamp

  3. Codeigniter:Cột 'id' trong mệnh đề thứ tự không rõ ràng

  4. Làm cách nào tôi có thể sử dụng MySQL Errcode 13 với CHỌN VÀO OUTFILE?

  5. Làm cách nào để lưu trữ và truy xuất hình ảnh từ cơ sở dữ liệu MySQL bằng PHP?