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

Cách xác định khóa chính tự động tăng dần trong PostgreSQL

Đối với một cơ sở dữ liệu quan hệ như PostgreSQL, nó có thể được coi là một tội lỗi giữa các nhà phát triển không để bao gồm một khóa chính trong mọi bảng. Do đó, điều quan trọng là bạn phải cố gắng hết sức để thêm cột khóa chính quan trọng nhất vào mỗi bảng và may mắn thay, Postgres cung cấp hai phương pháp để hoàn thành nhiệm vụ này.

Sử dụng Loại Dữ liệu Nối tiếp

Cho đến nay, kỹ thuật đơn giản và phổ biến nhất để thêm khóa chính trong Postgres là sử dụng SERIAL hoặc BIGSERIAL các kiểu dữ liệu khi CREATING một bảng mới. Như đã nêu trong tài liệu chính thức, SERIAL không phải là một kiểu dữ liệu thực, mà chỉ đơn giản là ký hiệu viết tắt yêu cầu Postgres tạo một số nhận dạng tự động tăng dần, duy nhất cho cột được chỉ định.

Dưới đây, chúng tôi sẽ tạo books đơn giản của chúng tôi bảng có SERIAL thích hợp kiểu dữ liệu cho khóa chính.

CREATE TABLE books (
  id              SERIAL PRIMARY KEY,
  title           VARCHAR(100) NOT NULL,
  primary_author  VARCHAR(100) NULL
);

Chỉ cần đặt id của chúng tôi cột dưới dạng SERIAL với PRIMARY KEY đính kèm, Postgres sẽ xử lý tất cả các công việc hậu trường phức tạp và tự động tăng id của chúng tôi cột có giá trị khóa chính, duy nhất cho mọi INSERT .

Sử dụng Trình tự tùy chỉnh

Trong một số trường hợp hiếm hoi, tính chất gia tăng tiêu chuẩn được tích hợp trong SERIALBIGSERIAL kiểu dữ liệu có thể không phù hợp với nhu cầu của bạn. Trong những trường hợp này, bạn có thể thực hiện cùng một chức năng khóa chính tự động tăng dần cho cột của mình bằng cách tạo SEQUENCE tùy chỉnh , tương tự như phương pháp được sử dụng trong phiên bản Oracle cũ hơn.

Có lẽ chúng tôi đặc biệt thích các số chẵn nhưng cũng rất ghét bất kỳ thứ gì nhỏ hơn 100, vì vậy chúng tôi chỉ muốn khóa chính của mình được tăng thêm hai từ bắt đầu từ 100 cho mỗi lần chèn. Điều này có thể được thực hiện với SEQUENCE tùy chỉnh như vậy:

CREATE SEQUENCE books_sequence
  start 2
  increment 2;

Bây giờ khi chúng ta INSERT một kỷ lục mới trong books của chúng tôi bảng, chúng ta cần đánh giá giá trị tiếp theo của chuỗi bằng nextval('books_sequence') và sử dụng nó làm id của chúng tôi .

INSERT INTO books
  (id, title, primary_author)
VALUES
  (nextval('books_sequence'), 'The Hobbit', 'Tolkien');

SEQUENCES có thể tăng thêm gia vị nếu muốn, với các tùy chọn như minvaluemaxvalue tất nhiên để chỉ ra các giá trị cực đoan và thậm chí cả CYCLE , cho phép trình tự "lặp lại" khi đạt đến maxvalue , quay lại start giá trị và bắt đầu leo ​​lên lại tất cả. Có thể tìm thấy nhiều thông tin hơn trong tài liệu chính thức.


  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 - truy vấn từ tập lệnh bash dưới dạng người dùng cơ sở dữ liệu 'postgres'

  2. Thiết lập môi trường tối ưu cho PostgreSQL

  3. Cách lấy hàng cuối cùng cho mỗi nhóm trong PostgreSQL

  4. Loại bỏ các thẻ HTML trong PostgreSQL

  5. Các thủ tục được lưu trữ có chạy trong giao dịch cơ sở dữ liệu trong Postgres không?