PostgreSQL: CHỌN ID được chèn lần cuối hoặc Giá trị trình tự

2022-03-17 20:19:47

Tôi nhận thấy rằng các chuyên gia PostgreSQL đang thắc mắc về giá trị trình tự hoặc id được chèn lần cuối của Bảng PostgreSQL.

Bạn có thể tìm thấy N số bài báo và thảo luận về điểm này.

Hãy để tôi mô tả rõ ràng chủ đề này bằng lời nói của tôi, bởi vì điều này rất quan trọng đối với Nhà phát triển cơ sở dữ liệu PostgreSQL.

PostgreSQL cung cấp đối tượng Sequence và bạn có thể tạo Sequence bằng cách gán SERIAL hoặc BIGSERIAL Datatype cho các cột.

Bạn có thể sử dụng CURRVAL và LASTVAL để lấy ID được chèn hoặc tạo lần cuối bởi đối tượng Trình tự.

Cả hai đều an toàn đồng thời và hành vi của Trình tự Postgres được thiết kế theo cách sao cho các phiên khác nhau sẽ không ảnh hưởng lẫn nhau.

Nhưng đôi khi, tôi tìm thấy ID sai bởi CURRVAL hoặc LASTVAL vì có một số quy tắc kích hoạt bổ sung được viết như khi bạn chèn một hàng trong bảng X, một số hàng khác cũng yêu cầu chèn vào bảng Y bằng Trình kích hoạt CHÈN.

Khi một số chèn thêm hoặc tải chèn đang diễn ra bởi các nguồn khác nhau, LASTVAL và CURRVAL trả về ID sai. Đây là tình huống rất hiếm, nhưng rủi ro vẫn có.

Giải pháp tốt nhất là - PostgreSQL INSERT RETURNING:
Sử dụng INSERT RETURNING, bạn có thể chọn id được chèn lần cuối cho chỉ INSERT đó tại thời điểm chèn.

Dưới đây là một bản demo nhỏ:

Tạo một bảng mẫu:

Chèn với RETURNING một giá trị được chèn cuối cùng:

Sau khi thực hiện câu lệnh INSERT ở trên, bạn sẽ nhận được ID được chèn cuối cùng.
Đề xuất của tôi là sử dụng RETURNING thay vì CURRVAL và LASTVAL.

Xem thêm:


Chia sẻ: