SQL - Ràng buộc NOT NULL: Hướng dẫn cho người mới bắt đầu

Xin chào các bạn tương lai của các phù thủy cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng lặn vào thế giới thú vị của SQL và khám phá một khái niệm quan trọng: ràng buộc NOT NULL. Đừng lo lắng nếu bạn là người mới bắt đầu lập trình; tôi sẽ hướng dẫn bạn từng bước trong hành trình này, giống như tôi đã làm cho hàng trăm học sinh trong những năm dạy học của mình. Vậy, hãy gấp Sleeve lên và bắt đầu nhé!

SQL - NOT NULL

Ràng buộc NOT NULL trong SQL

NOT NULL là gì?

Hãy tưởng tượng bạn đang điền vào một mẫu đơn để làm thẻ thư viện mới. Một số mục là tùy chọn, như tên đệm của bạn, nhưng có những mụcAbsolutely cần thiết, chẳng hạn như tên và địa chỉ của bạn. Trong thế giới cơ sở dữ liệu, ràng buộc NOT NULL đóng vai trò tương tự. Nó đảm bảo rằng một cột phải luôn chứa giá trị; nó không thể để trống.

Tại sao NOT NULL lại quan trọng?

Hãy tưởng tượng một cơ sở dữ liệu trường học. Liệu có hợp lý khi có một hồ sơ học sinh không có tên hoặc số ID? Có lẽ không! Ràng buộc NOT NULL giúp duy trì tính toàn vẹn dữ liệu bằng cách ngăn chặn việc bỏ sót thông tin quan trọng.

Tạo ràng buộc NOT NULL trên một bảng

Hãy bắt đầu bằng cách tạo một bảng đơn giản cho thư viện hư cấu của chúng ta. Chúng ta sẽ gọi nó là "Books".

CREATE TABLE Books (
BookID INT NOT NULL,
Title VARCHAR(100) NOT NULL,
Author VARCHAR(50) NOT NULL,
PublicationYear INT,
ISBN VARCHAR(13) NOT NULL
);

Trong ví dụ này:

  • BookID, Title, Author, và ISBN được đánh dấu là NOT NULL vì chúng tôi coi các trường này là cần thiết.
  • PublicationYear không có ràng buộc NOT NULL, vì vậy nó là tùy chọn.

Bây giờ, hãy thử chèn một số dữ liệu:

-- Câu lệnh này sẽ hoạt động tốt
INSERT INTO Books (BookID, Title, Author, PublicationYear, ISBN)
VALUES (1, 'To Kill a Mockingbird', 'Harper Lee', 1960, '9780446310789');

-- Câu lệnh này cũng sẽ hoạt động (bỏ qua mục tùy chọn PublicationYear)
INSERT INTO Books (BookID, Title, Author, ISBN)
VALUES (2, '1984', 'George Orwell', '9780451524935');

-- Câu lệnh này sẽ thất bại vì chúng ta đang cố gắng bỏ qua mục Author, mà là NOT NULL
INSERT INTO Books (BookID, Title, PublicationYear, ISBN)
VALUES (3, 'The Great Gatsby', 1925, '9780743273565');

Câu lệnh INSERT cuối cùng sẽ gây ra lỗi vì chúng ta đang vi phạm ràng buộc NOT NULL trên cột Author.

Xóa ràng buộc NOT NULL khỏi bảng

Đôi khi, chúng ta có thể nhận ra rằng một trường mà chúng ta ban đầu nghĩ là quan trọng thực sự có thể là tùy chọn. Giả sử chúng ta quyết định rằng ISBN không phải lúc nào cũng cần thiết (có lẽ đối với sách rất cũ). Dưới đây là cách chúng ta có thể xóa ràng buộc NOT NULL:

ALTER TABLE Books
MODIFY COLUMN ISBN VARCHAR(13);

Bây giờ, ISBN có thể là NULL. Nhưng hãy nhớ, việc thay đổi ràng buộc trên bảng hiện có nên được thực hiện cẩn thận, đặc biệt là trong môi trường sản xuất!

Thêm ràng buộc NOT NULL vào bảng hiện có

Nếu chúng ta nhận ra sau này rằng chúng ta cần đảm bảo mỗi cuốn sách đều có năm xuất bản, chúng ta có thể thêm ràng buộc NOT NULL vào cột hiện có:

-- Đầu tiên, chúng ta cần đảm bảo rằng không có giá trị NULL trong cột
UPDATE Books
SET PublicationYear = 0
WHERE PublicationYear IS NULL;

-- Bây giờ chúng ta có thể thêm ràng buộc NOT NULL
ALTER TABLE Books
MODIFY COLUMN PublicationYear INT NOT NULL;

Đây là những gì đang xảy ra:

  1. Chúng ta cập nhật bất kỳ giá trị NULL nào thành 0 (hoặc một giá trị mặc định khác phù hợp).
  2. Chúng ta thay đổi bảng để thêm ràng buộc NOT NULL.

Việc xử lý các giá trị NULL hiện có trước khi thêm ràng buộc là rất quan trọng; nếu không, câu lệnh ALTER TABLE sẽ thất bại.

Lời cảnh báo

Thêm ràng buộc NOT NULL vào bảng hiện có với dữ liệu có thể là điều khó khăn. Luôn sao lưu dữ liệu trước khi thực hiện các thay đổi!

Practices tốt nhất khi sử dụng NOT NULL

Thực hành Mô tả
Sử dụng tiết kiệm Áp dụng NOT NULL chỉ cho các cột thực sự cần có giá trị
Xem xét sử dụng mặc định Đối với các cột nên luôn có giá trị nhưng có thể không được cung cấp, xem xét sử dụng DEFAULT cùng với NOT NULL
Lập kế hoạch trước Cố gắng xác định các cột NOT NULL trong giai đoạn thiết kế để tránh việc thay đổi bảng sau này
Tài liệu hóa Đclearly tài liệu hóa lý do tại sao một số cột là NOT NULL trong thiết kế schema của bạn

Kết luận

Và thế là bạn đã có nó, các học sinh ham học! Chúng ta đã cùng nhau đi qua vùng đất của ràng buộc NOT NULL, từ việc tạo bảng với các cột NOT NULL đến việc thêm và xóa các ràng buộc này trên các bảng hiện có. Nhớ rằng, NOT NULL giống như một người thư viện nghiêm ngặt đảm bảo rằng tất cả các chi tiết quan trọng trong "sách" cơ sở dữ liệu của chúng ta được điền đầy đủ.

Khi bạn tiếp tục hành trình SQL của mình, bạn sẽ thấy rằng NOT NULL chỉ là một trong nhiều công cụ trong bộ công cụ cơ sở dữ liệu của bạn. Nó có thể nhỏ bé, nhưng tin tôi đi, nó rất mạnh mẽ trong việc duy trì tính toàn vẹn dữ liệu. Tôi đã thấy rất nhiều thảm họa cơ sở dữ liệu được ngăn chặn nhờ vào các ràng buộc NOT NULL được đặt đúng!

Tiếp tục luyện tập, 保持好奇心, và trước khi bạn biết điều đó, bạn sẽ viết các truy vấn SQL trong giấc ngủ (mặc dù tôi thực sự không khuyến khích điều đó - bàn phím là một cái gối tồi tệ!).

Chúc các bạn may mắn, những người thợ dữ liệu tương lai!

Credits: Image by storyset