PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tôi không hiểu cách thức hoạt động của nextval () của postgresql, ai đó có thể giải thích được không?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql:Kết nối bị từ chối. Kiểm tra xem tên máy chủ và cổng có chính xác không và người quản lý bưu điện có chấp nhận kết nối TCP / IP không

  2. Sử dụng psql's \ copy cho truy vấn nhiều dòng

  3. Chèn số dấu phẩy động vào bảng bằng libpq

  4. Cách truyền từ văn bản sang int nếu cột chứa cả giá trị int và NULL trong PostgreSQL

  5. Bản sao Londiste với PostgreSQL 9.0