NEXTVAL
là một hàm để nhận giá trị tiếp theo từ một chuỗi.
Sequence là một đối tượng trả về các số ngày càng tăng, khác nhau cho mỗi cuộc gọi, bất kể giao dịch, v.v.
Mỗi lần bạn gọi NEXTVAL
, bạn nhận được một số khác.
Điều này chủ yếu được sử dụng để tạo khóa chính thay thế cho các bảng của bạn.
Bạn có thể tạo một bảng như sau:
CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);
và chèn các giá trị như sau:
INSERT
INTO mytable (id, value)
VALUES
(NEXTVAL('mysequence'), 1),
(NEXTVAL('mysequence'), 2);
và xem những gì bạn nhận được:
SELECT * FROM mytable;
id | value
----+-------
1 | 1
2 | 2
PostgreSQL cung cấp một cú pháp tuyệt vời cho điều này:
CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);
tương đương với
CREATE SEQUENCE mytable_id_seq; -- table_column_'seq'
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY DEFAULT NEXTVAL('mytable_id_seq'), value INT); -- it's not null and has a default value automatically
và có thể được sử dụng như thế này:
INSERT
INTO mytable (value)
VALUES (1),
(2); -- you can omit id, it will get filled for you.
Lưu ý rằng ngay cả khi bạn khôi phục câu lệnh chèn của mình hoặc chạy các câu lệnh đồng thời từ hai phiên khác nhau, các giá trị trình tự được trả về sẽ không bao giờ giống nhau và không bao giờ được sử dụng lại (hãy đọc bản in đẹp trong tài liệu mặc dù trong CYCLE
).
Vì vậy, bạn có thể chắc chắn rằng tất cả các giá trị của khóa chính của bạn sẽ được tạo duy nhất trong bảng.