2011-06-26 32 views
12

Tôi đã tìm thấy một số câu hỏi khác về chủ đề này. Điều này một ...PHP Postgres: Nhận ID chèn cuối cùng

mysql_insert_id alternative for postgresql

... và the manual dường như chỉ ra rằng bạn có thể gọi bất cứ lúc nào lastval() và nó sẽ làm việc như mong đợi. Nhưng lần này ...

Postgresql and PHP: is the currval a efficent way to retrieve the last row inserted id, in a multiuser application?

... dường như nói rằng nó phải nằm trong một giao dịch. Vì vậy, câu hỏi của tôi là: tôi có thể chờ đợi miễn là tôi thích trước khi truy vấn lastval() (không có giao dịch) không? Và đó là đáng tin cậy khi đối mặt với nhiều kết nối đồng thời?

+0

Trình tự phụ thuộc vào phiên không có trong giao dịch. Nhưng nó không phải là tốt để chờ đợi và thực hiện các truy vấn khác trong khi đó, bạn có thể nhận được lastval của truy vấn khác. – jordani

Trả lời

28

INSERT, UPDATE và DELETE trong PostgreSQL có một điều khoản LẠI có nghĩa là bạn có thể làm:

INSERT INTO .... 
RETURNING id; 

Sau đó, truy vấn sẽ trả về giá trị nó chèn vào cho id cho mỗi hàng chèn vào. Lưu một chuyến đi khứ hồi tới máy chủ.

+0

Cảm ơn rất nhiều vì câu trả lời này! Chính xác những gì tôi cần, giảm một nửa số lượng truy vấn tôi cần để thực hiện cho một số hoạt động nhất định. –

+2

Cảm ơn! BTW, nếu cần, bạn có thể trả về nhiều giá trị - RETURNING * sẽ trả về toàn bộ hàng được chèn. – SamGoody

+0

Nếu bạn không biết tên của trường id thì sao? – JoeTidee

6

Có, the sequence functions cung cấp đa phương tiện an toàn phương pháp để lấy giá trị chuỗi liên tiếp từ các đối tượng chuỗi.

+1

Tôi rất vui khi thấy rằng các trình tự bây giờ là ANSI - AUTOINCREMENT/IDENTITY quá hạn chế. –

+0

Tuyệt vời, cảm ơn. – Jonah

Các vấn đề liên quan