PostgreSQL

Ràng buộc PRIMARY KEY – Thiết lập khóa chính cho bảng

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng
Được viết bởi Minh Hoàng

Series chia sẻ về PostgreSQL – Cơ sở dữ liệu mã nguồn mở tiên tiến nhất thế giới.

Bài viết này sẽ giải thích khóa chính là gìcách quản lý các ràng buộc khóa chính của PostgreSQL thông qua các câu lệnh SQL.

Khóa chính (primary key) là một cột hoặc một nhóm cột được sử dụng để xác định một hàng duy nhất trong bảng. Bạn xác định các khóa chính thông qua các ràng buộc khóa chính.

Về mặt kỹ thuật, một ràng buộc khóa chính là sự kết hợp của một ràng buộc not-null và một ràng buộc UNIQUE.

Nếu bạn tạo bảng có ràng buộc PRIMARY KEY trên cột, bạn sẽ không thể lưu trữ các giá trị trùng lặp trong cột. Tương tự như ràng buộc UNIQUE, nhưng bạn không thể lưu trữ NULL trong một cột có ràng buộc PRIMARY KEY.

1. Cách sử dụng ràng buộc PRIMARY KEY

1. Cách sử dụng ràng buộc PRIMARY KEY

Khi bạn tạo một bảng, bạn có thể đặt ràng buộc PRIMARY KEY trên một cột để đặt cột đó làm khóa chính cho bảng.

Các giá trị trùng lặp không thể được thêm vào các cột có ràng buộc PRIMARY KEYkhông được chứa NULL.

Cú pháp như sau:

CREATE TABLE [ IF NOT EXISTS ] table_name (
  column_name data_type PRIMARY KEY [, ... ]
);

Câu lệnh sau tạo một bảng mới có tên employee với ràng buộc PRIMARY KEY cho cột name:

CREATE TABLE employee (
	name VARCHAR (20) PRIMARY KEY,
	department VARCHAR (30)
);

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (1)

Ràng buộc PRIMARY KEY ở trên cũng có thể được viết lại dưới dạng ràng buộc bảng như được hiển thị trong truy vấn sau:

CREATE TABLE employee (
	name VARCHAR (20),
	department VARCHAR (30),
        PRIMARY KEY(name)
);

Xem thông tin cột và ràng buộc đã tạo của bảng employee (*) :

\d employee

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (2)

Bây giờ, thử thêm một số dữ liệu vào bảng employee:

INSERT INTO employee VALUES
  ('Hoang Ngoc Minh', 'Sales'), 
  ('Minh Hoang Blog', 'Marketing');

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (3)

Những dữ liệu này có thể được thêm vào mà không có vấn đề gì vì giá trị của cột name không trùng lặp, cũng không phải NULL.

Tiếp theo, thử thêm dữ liệu bằng cách chỉ định giá trị giống như giá trị đã được lưu trữ trong bảng làm giá trị của cột name (★1):

INSERT INTO employee VALUES ('Hoang Ngoc Minh', 'Customer');

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (4)

hay thêm giá trị NULL vào cột name (★2):

INSERT INTO employee VALUES (NULL, 'Legal');

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (5)

việc thêm dữ liệu của cả 2 trường hợp này sẽ thất bại và nhận được thông báo lỗi như hình vì không thỏa mãn điều kiện của ràng buộc PRIMARY KEY trên cột name.

2. Cách tạo ràng buộc PRIMARY KEY trên nhiều cột

2. Cách tạo ràng buộc PRIMARY KEY trên nhiều cột

PostgreSQL cho phép bạn tạo ràng buộc PRIMARY KEY cho một nhóm cột bằng cú pháp sau:

CREATE TABLE [ IF NOT EXISTS ] table_name (
  column_name1 data_type1,
  column_name2 data_type2,
  column_name3 data_type3,
  [... ,]
  [CONSTRAINT constraint_name] PRIMARY KEY ( column_name2, column_name3 [, ... ] )
)

※Nếu bạn không chỉ định rõ ràng tên cho ràng buộc khóa chính [CONSTRAINT constraint_name], PostgreSQL sẽ chỉ định tên mặc định cho ràng buộc khóa chính. Theo mặc định, PostgreSQL sử dụng table-name_pkey làm tên mặc định cho ràng buộc khóa chính.

Ở hình (*) phía trên, bạn có thể thấy PostgreSQL đã tạo ràng buộc khóa chính với tên employee_pkey cho bảng employee.

Ví dụ tạo bảng employee1 có chỉ định tên pkey_name_email (*) (*) cho ràng buộc khóa chính:

CREATE TABLE employee1 (
	name VARCHAR (20),
	department VARCHAR (30),
	email VARCHAR (30),
        CONSTRAINT pkey_name_email PRIMARY KEY(name,email)
);

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (6)

Xem thông tin cột và ràng buộc đã tạo của bảng employee1:

\d employee1

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (7)

Và cũng giống như các ví dụ ở (★1) và (★2) thì cũng không thể thêm các giá trị trùng lặp, hay NULL vào cột khóa chính là name, email của bảng employee1.

3. Thêm ràng buộc PRIMARY KEY cho cột của bảng đã tồn tại

3. Thêm ràng buộc PRIMARY KEY cho cột của bảng đã tồn tại

Rất hiếm khi thêm ràng buộc PRIMARY KEY cho bảng hiện có. Trong trường hợp phải làm điều đó, bạn có thể sử dụng câu lệnh ALTER TABLE để thêm ràng buộc khóa chính:

ALTER TABLE table_name ADD PRIMARY KEY (column_1, column_2);

Câu lệnh sau tạo một bảng có tên là productskhông xác định bất kỳ khóa chính nào:

CREATE TABLE products (
	product_no INTEGER,
	description TEXT,
	product_cost NUMERIC
);

Giả sử bạn muốn thêm ràng buộc khóa chính PRIMARY KEY vào bảng products cho cột product_no, bạn có thể thực hiện câu lệnh sau:

ALTER TABLE products 
ADD PRIMARY KEY (product_no);
4. Cách thêm khóa chính tăng tự động vào bảng hiện có

4. Cách thêm khóa chính tăng tự động vào bảng hiện có

Giả sử, chúng ta có một bảng vendors không có bất kỳ khóa chính nào:

CREATE TABLE vendors (name VARCHAR(50));

Sau đó, thêm một vài hàng vào bảng vendors bằng cách sử dụng câu lệnh INSERT:

INSERT INTO vendors VALUES
	('Microsoft'),
	('IBM'),
	('Apple'),
	('Samsung');

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (8)

Sử dụng câu lệnh SELECT để xác nhận thông tin đã được thêm vào bảng vendors:

SELECT * FROM vendors;

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (9)

Bây giờ, nếu chúng ta muốn thêm một khóa chính có tên id vào bảng vendors và trường id được tự động tăng lên một, chúng ta sử dụng câu lệnh sau:

ALTER TABLE vendors ADD COLUMN ID SERIAL PRIMARY KEY;

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (10)

Kiểm tra lại dữ liệu của bảng vendors một lần nữa:

SELECT id,name FROM vendors;

Ràng buộc PRIMARY KEY - Thiết lập khóa chính cho bảng (11)

Khóa chính là giá trị của cột id tăng tự động đã được thêm vào bảng vendors.

5. Cách xóa ràng buộc PRIMARY KEY

5. Cách xóa ràng buộc PRIMARY KEY

Để loại bỏ ràng buộc khóa chính PRIMARY KEY hiện có, bạn cũng sử dụng câu lệnh ALTER TABLE với cú pháp sau:

ALTER TABLE table_name DROP CONSTRAINT primary_key_constraint_name;

Ví dụ: để loại bỏ ràng buộc khóa chính pkey_name_email của bảng employee1 đã tạo ở (*) (*) , bạn sử dụng câu lệnh sau:

ALTER TABLE employee1
DROP CONSTRAINT pkey_name_email;
Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

2 bình luận

Translate »