Đố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 SERIAL
và BIGSERIAL
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ư minvalue
và maxvalue
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.