18/08/2018, 11:05

(NOT NULL) Không cho phép nhận giá trị NULL trong MySQL

NOT NULL được dùng để thiết lập cột không được nhận giá trị NULL . Đối với cột đã thiết lập NOT NULL, khi INSERT dữ liệu vào bảng thì cột được thiết lập NOT NULL không được nhận giá trị NULL, nếu không khi chạy lệnh sẽ bị lỗi. Giá trị NULL là gì? Ví dụ, chúng ta có một bảng sinh_vien, ...

NOT NULL được dùng để thiết lập cột không được nhận giá trị NULL.

Đối với cột đã thiết lập NOT NULL, khi INSERT dữ liệu vào bảng thì cột được thiết lập NOT NULL không được nhận giá trị NULL, nếu không khi chạy lệnh sẽ bị lỗi.

Giá trị NULL là gì?

Ví dụ, chúng ta có một bảng sinh_vien, bảng có 4 cột tên là column1, column2, column3, column4.

Thêm một mẫu tin vào bảng bằng câu lệnh sau:

INSERT INTO sinh_vien (column1, column3) VALUES ("abc","def");

Nhận thấy ở câu lệnh trên thiếu tham số column2 và column4, vậy tức là khi mẫu tin được thêm vào bảng thì cột column2 và column4 nhận giá trị NULL

Ví dụ  KHÔNG sử dụng NOT NULL

Dùng câu lệnh bên dưới để tạo bảng sinh_vien

CREATE TABLE sinh_vien(
    Full_name VARCHAR(150),
    Gender VARCHAR(3),
    Age INT(11),
    City VARCHAR(50)
);

Thêm vào bảng bốn mẫu tin

INSERT INTO sinh_vien VALUES ('Nguyen Thanh Nhan', 'Nam', 19, 'Can Tho');
INSERT INTO sinh_vien (Full_name, Gender, Age, City) VALUES ('Pham Thu Huong', 'Nu', 20, 'Vinh Long');
INSERT INTO sinh_vien (Full_name, City) VALUES ('Nguyen Nhu Ngoc', 'Soc Trang');
INSERT INTO sinh_vien (Gender) VALUES ('Nam');

Sau khi thực thi hai câu lệnh trên, chúng ta có một bản sinh_vien như sau:

Full_name Gender Age City
Nguyen Thanh Nhan Nam 19 Can Tho
Pham Thu Huong Nu 20 Vinh Long
Nguyen Nhu Ngoc NULL NULL Soc Trang
NULL Nam NULL NULL

Nhận thấy: Ở câu lệnh INSERT thứ 3 (thiếu 2 tham số Gender, Age), ở câu lệnh INSERT thứ 4 (thiếu 3 tham số Full_name, Age, City). Do đó chúng nhận giá trị NULL.

Đối với cột không thiết lập NOT NULL, khi INSERT dữ liệu vào bảng nếu tham số của cột đó bị bỏ trống thì những cột đó sẽ nhận giá trị NULL

Ví dụ CÓ sử dụng NOT NULL

Dùng câu lệnh bên dưới để tạo bảng sinh_vien

CREATE TABLE sinh_vien(
    Full_name VARCHAR(150) NOT NULL,
    Gender VARCHAR(3) NOT NULL,
    Age INT(11) NOT NULL,
    City VARCHAR(50) NOT NULL
);

Thêm vào bảng bốn mẫu tin

INSERT INTO sinh_vien VALUES ('Nguyen Thanh Nhan', 'Nam', 19, 'Can Tho');
INSERT INTO sinh_vien (Full_name, Gender, Age, City) VALUES ('Pham Thu Huong', 'Nu', 20, 'Vinh Long');
INSERT INTO sinh_vien (Full_name, City) VALUES ('Nguyen Nhu Ngoc', 'Soc Trang');
INSERT INTO sinh_vien (Gender) VALUES ('Nam');

Sau khi thực thi hai câu lệnh trên, chúng ta có một bản sinh_vien như sau:

Full_name Gender Age City
Nguyen Thanh Nhan Nam 19 Can Tho
Pham Thu Huong Nu 20 Vinh Long

Nhận thấy: Câu lệnh 1, 2 được thực thi trước và tham số đầy đủ nên thêm thành công. Còn câu lệnh 3,4 thiếu tham số nên thêm thất bại.

Lưu ý

Ở một số phiên bản MySQL mới. Đối với những cột áp dụng NOT NULL mà khi INSERT bị bỏ trống, thì nó sẽ gán giá trị mặc định cho những cột đó.

Ví dụ (chúng ta sử dụng lại bảng ở Ví dụ về CÓ sử dụng NOT NULL)

Thêm vào bảng hai mẫu tin

INSERT INTO sinh_vien (Full_name, City) VALUES ('Nguyen Nhu Ngoc', 'Soc Trang');
INSERT INTO sinh_vien (Gender) VALUES ('Nam');

Hai mẫu tin mới thêm sẽ trông như thế này

Full_name Gender Age City
Nguyen Nhu Ngoc   0 Soc Trang
  Nam 0  
0