Khi tôi thực hiện một hàng duy nhất INSERT
cho một bảng có một AUTO_INCREMENT
cột tôi muốn sử dụng LAST_INSERT_ID()
hàm để trả về AUTO_INCREMENT
giá 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_IDENTITY
và @@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_INCREMENT
giá trị đầu tiên được tạo cho câu lệnh gần đây nhất ảnh hưởng đến mộtAUTO_INCREMENT
cộ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_INCREMENT
cá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_INCREMENT
cộ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.