CodeGym /Các khóa học /SQL SELF /Thêm và xóa cột trong bảng

Thêm và xóa cột trong bảng

SQL SELF
Mức độ, Bài học
Có sẵn

Giả sử bạn đang thiết kế database cho trường đại học. Ban đầu bảng sinh viên chỉ có hai trường: ID và tên. Đơn giản thôi, sinh viên bắt đầu dùng hệ thống. Nhưng sau một tháng, thầy cô đến hỏi: "Có thể thêm tuổi nữa không?", rồi sau đó: "Cần thêm email nữa nhé". Và tiếp theo: "Thôi bỏ trường middle_name đi, chẳng ai điền cả!". Đó là lúc bạn cần kỹ năng dùng ALTER TABLE để thêm và xóa cột.

Cú pháp thêm cột

Vậy để thêm cột mới vào bảng PostgreSQL đã có, dùng lệnh ALTER TABLE. Xem cú pháp nè:

ALTER TABLE table_name
ADD COLUMN column_name data_type [constraints];
  • table_name — tên bảng mà bạn muốn thêm cột mới vào.
  • column_name — tên cột bạn muốn thêm.
  • data_type — kiểu dữ liệu, ví dụ VARCHAR, INTEGER hoặc DATE.
  • constraints (tham số không bắt buộc) — ràng buộc bạn muốn áp dụng cho cột này, ví dụ NOT NULL, DEFAULT v.v.

Ví dụ: thêm cột mới

Giả sử bạn có bảng students đã tạo trước đó:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

Bỗng dưng có yêu cầu thêm cột age để lưu tuổi sinh viên. Làm như này nè:

ALTER TABLE students
ADD COLUMN age INTEGER;

Bây giờ cấu trúc bảng students sẽ như sau:

id name age
1 Eva NULL
2 Alex NULL

Nếu thêm bản ghi mới mà không chỉ định tuổi, PostgreSQL sẽ tự động gán giá trị NULL, vì mình chưa đặt ràng buộc kiểu NOT NULL hay giá trị mặc định (DEFAULT).

Cú pháp xóa cột

Xóa cột khỏi bảng cũng dùng lệnh ALTER TABLE. Đây là cú pháp:

ALTER TABLE table_name
DROP COLUMN column_name [RESTRICT | CASCADE];
  • table_name — tên bảng mà bạn muốn xóa cột khỏi.
  • column_name — tên cột cần xóa.
  • RESTRICT — cấm xóa cột nếu có tham chiếu tới nó (mặc định).
  • CASCADE — xóa cột cùng tất cả các phụ thuộc liên quan.

Về xóa phụ thuộc kiểu cascade mình sẽ kể kỹ hơn ở level sau :P

Ví dụ: xóa cột không cần thiết

Quay lại bảng students. Giờ mình quyết định trường age không cần nữa. Xóa nó đi:

ALTER TABLE students
DROP COLUMN age;

Bây giờ cấu trúc bảng lại đơn giản như cũ:

id name
1 Eva
2 Alex

Ví dụ hữu ích

Thêm cột với constrains

Nếu bạn muốn thêm cột age nhưng có ràng buộc NOT NULL và giá trị mặc định thì sao? Dùng đoạn code này nhé:

ALTER TABLE students
ADD COLUMN age INTEGER NOT NULL DEFAULT 18;

Bây giờ tất cả các dòng đã có sẽ có giá trị 18 cho cột age, còn bản ghi mới thì bắt buộc phải có giá trị cho trường này, trừ khi dùng giá trị mặc định.

Xóa cột có phụ thuộc

Nếu cột nào đó có phụ thuộc (ví dụ dùng trong view hoặc trigger), bạn phải dùng modifier CASCADE. Nhưng cẩn thận nha: có thể ảnh hưởng tới các object khác trong database. Ví dụ:

ALTER TABLE students
DROP COLUMN email CASCADE;

Lỗi thường gặp và lưu ý

Lỗi: thêm cột với kiểu dữ liệu sai.
Giả sử bạn thêm cột kiểu INTEGER nhưng lại lưu dữ liệu dạng text. PostgreSQL sẽ không hiểu và báo lỗi khi thêm bản ghi. Kiểu dữ liệu phải luôn khớp với nội dung lưu trữ.

Lỗi: xóa cột mà không để ý phụ thuộc.
Ví dụ, nếu bạn xóa cột mà có index hoặc foreign key tham chiếu tới nó, PostgreSQL có thể báo lỗi nếu không dùng modifier CASCADE.

Lỗi: xóa cột có phụ thuộc. Ví dụ, nếu bạn xóa cột mà có index hoặc foreign key tham chiếu tới nó, PostgreSQL có thể báo lỗi nếu không dùng modifier CASCADE. Bạn thêm modifier đó và xóa luôn cả ngàn dòng từng tham chiếu tới cột vừa xóa. Những dòng đó đáng lẽ không nên xóa : (

Lưu ý: thứ tự thực hiện thay đổi.
Đôi khi thêm cột với ràng buộc cần chú ý thứ tự thao tác. Ví dụ, nếu thêm cột với NOT NULL, bạn phải gán giá trị mặc định trước, nếu không PostgreSQL sẽ báo lỗi.

2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Thêm cột mới
Thêm cột mới
2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Thêm cột với ràng buộc
Thêm cột với ràng buộc
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION