Hướng dẫn not null in mysql - không null trong mysql

Ràng buộc NOT NULL trong MySQL

1) Giá trị NULL là gì !?

- Khi chúng ta chèn một hàng mới vào bên trong cái bảng, nếu chúng ta không xác định đầy đủ giá trị cho tất cả các cột thì mặc định những cột bị bỏ trống sẽ nhận giá trị NULL.

- Tôi có một cái bảng SinhVien & một câu lệnh như bên dưới.

MSSV HoTen NamSinh GioiTinh ThanhPho
INSERT INTO SinhVien (MSSV, GioiTinh, ThanhPho) VALUES (1, "", "Cần Thơ");

- Sau khi tôi thực thi câu lệnh INSERT INTO phía trên thì cái bảng SinhVien sẽ trở thành:

MSSV HoTen NamSinh GioiTinh ThanhPho
1 - Sau khi tôi thực thi câu lệnh INSERT INTO phía trên thì cái bảng SinhVien sẽ trở thành:- Sau khi tôi thực thi câu lệnh INSERT INTO phía trên thì cái bảng SinhVien sẽ trở thành: NULL

Cần Thơ không có dữ liệu gì cả, nó hoàn toàn khác so với một chuỗi rỗng (chuỗi rỗng cũng là một giá trị, điển hình như trong cái bảng SinhVien nằm ở ví dụ phía trên, sinh viên được tôi chèn vào có GioiTinh là một chuỗi rỗng chứ không phải là NULL)

- Lưu ý: Giá trị NULL có ý nghĩa là không có dữ liệu gì cả, nó hoàn toàn khác so với một chuỗi rỗng (chuỗi rỗng cũng là một giá trị, điển hình như trong cái bảng SinhVien nằm ở ví dụ phía trên, sinh viên được tôi chèn vào có GioiTinh là một chuỗi rỗng chứ không phải là NULL)

2) Chức năng của ràng buộc NOT NULL

- Ràng buộc NOT NULL dùng để thiết lập việc một cột không được phép chấp nhận giá trị NULL, tức là chúng ta không thể chèn hoặc cập nhật một hàng nếu không gán giá trị (hoặc gán giá trị là NULL) cho cột này.MSSV & GioiSinh bị thiết lập ràng buộc NOT NULL, điều đó đồng nghĩa với việc hai cột này không thể chứa giá trị NULL.

CREATE TABLE SinhVien(
	MSSV INT NOT NULL,
	HoTen VARCHAR(255),
	NamSinh YEAR,
	GioiTinh VARCHAR(10) NOT NULL
);

- Đoạn mã bên dưới dùng để tạo một cái bảng SinhVien. Trong đó, hai cột MSSV & GioiSinh bị thiết lập ràng buộc NOT NULL, điều đó đồng nghĩa với việc hai cột này không thể chứa giá trị NULL.

3) Thêm ràng buộc NOT NULL khi bảng đã được tạo

ALTER TABLE table_name MODIFY column_name DATA TYPE NOT NULL;

- Đối với trường hợp bảng đã được tạo trước đó, nhưng do quên thiết lập ràng buộc NOT NULL cho cột nên bây giờ các bạn muốn bổ sung, để làm được điều đó thì chúng ta sử dụng lệnh chỉnh sửa bảng như bên dưới.

ALTER TABLE SinhVien MODIFY HoTen VARCHAR(255) NOT NULL;

- Ví dụ, để bổ sung ràng buộc NOT NULL cho cột HoTen (trong bảng SinhVien) thì tôi sử dụng câu lệnh bên dưới.

4) Xóa ràng buộc NOT NULL

ALTER TABLE table_name MODIFY column_name DATA TYPE;

- Để xóa ràng buộc NOT NULL trên cột thì chúng ta sử dụng lệnh chỉnh sửa bảng như bên dưới.

ALTER TABLE SinhVien MODIFY HoTen VARCHAR(255);

Soc Trang

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

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

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

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

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

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

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

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');

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

Full_nameSau khi thực thi hai câu lệnh trên, chúng ta có một bản sinh_vien như sau:AgeCity
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

Soc Trang

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

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
);

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

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');

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

Full_nameGenderAgeCity
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)Ví dụ về CÓ sử dụng NOT NULL)

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

CREATE TABLE SinhVien(
	MSSV INT NOT NULL,
	HoTen VARCHAR(255),
	NamSinh YEAR,
	GioiTinh VARCHAR(10) NOT NULL
);
1

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

Full_nameGenderAgeCity
Nguyen Thanh Nhan Nam 0 Can Tho
Nam Nam 0 Nam