Khi tôi thực hiện một hàng duy nhất INSERTcho một bảng có một AUTO_INCREMENTcột tôi muốn sử dụng LAST_INSERT_ID()hàm để trả về AUTO_INCREMENTgiá trị ed mới được lưu trữ cho hàng đó.
Vì nhiều nhà phát triển và quản trị viên Microsoft SQL Server chắc chắn nhận thức được chức năng tương đương trong SQL Server ( SCOPE_IDENTITYvà @@IDENTITY) không có vấn đề gì .
Tôi biết trạng thái tài liệu MySQL:
ID được tạo được duy trì trong máy chủ trên cơ sở mỗi kết nối . Điều này có nghĩa là giá trị được hàm trả về cho một máy khách nhất định là
AUTO_INCREMENTgiá trị đầu tiên được tạo cho câu lệnh gần đây nhất ảnh hưởng đến mộtAUTO_INCREMENTcột bởi máy khách đó . Giá trị này không thể bị ảnh hưởng bởi các khách hàng khác, ngay cả khi họ tạo raAUTO_INCREMENTcác giá trị của riêng họ. Hành vi này đảm bảo rằng mỗi khách hàng có thể truy xuất ID riêng của mình mà không cần quan tâm đến hoạt động của các khách hàng khác và không cần khóa hoặc giao dịch.
và thậm chí đi xa để nói:
Sử dụng
LAST_INSERT_ID()vàAUTO_INCREMENTcột đồng thời từ nhiều khách hàng là hoàn toàn hợp lệ.
Có bất kỳ rủi ro hoặc kịch bản đã biết nào có thể khiến LAST_INSERT_ID()không trả lại giá trị chính xác không?
Tôi đang sử dụng MySQL 5.5 trên CentOS 5.5 x64 và Fedora 16 x64 và công cụ InnoDB.
last_insert_id()phán đoán nếu một truy vấn đã thành công. Rốt cuộc, đó là Id được chèn cuối cùng, giữ các giá trị bạn cần khi bạn đã biết mình đã thành công.