Giá trị NULL trong MySQL

Giá trị NULL trong MySQL
Giá trị NULL trong MySQL

Chức năng của Giá trị NULL trong MySQL

Giá trị NULL trong MySQL được dùng để tạo những cột trong bảng, những cột đó có thể cho phép NULL hoặc không cho phép NULL, nếu không có phép NULL thì khi insert dữ liệu cột đó phải được chèn, những cột có giá trị NULL thì chúng ta có thể WHERE IS NULL nó để lấy dữ liệu.

Giá trị NULL trong CREATE TABLE

CREATE TABLE `tb_nhanvien` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `ten` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
  `tuoi` int(11) DEFAULT 0,
  `luong` bigint(20) DEFAULT 0,
  `gioitinh` tinyint(1) DEFAULT 0,
  `noidung` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci,
  `title` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
  `description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
<?php
   $dbhost = 'localhost';
   $dbuser = 'webmoi_userdata'; // Tên username
   $dbpass = 'xgZwEfQWE'; // Mật khẩu
   // Kết nối đến tên username
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   if(! $conn ){
     die('Không kết nối được: ' . mysql_error());
   }
   // Chọn tên database
   mysql_select_db('webmoi_tendata');
   // Xét kiểu tiếng việt 
   mysql_query('SET NAMES "utf8"');
   
  // CREATE TABLE `tb_nhanvien`
   echo "<b>CREATE TABLE `tb_nhanvien`</b><br>";
   $sql ="CREATE TABLE `tb_nhanvien` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `ten` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
  `tuoi` int(11) DEFAULT 0,
  `luong` bigint(20) DEFAULT 0,
  `gioitinh` tinyint(1) DEFAULT 0,
  `noidung` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci,
  `title` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
  `description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
  ";
  //Cột id (NOT NULL): không cho phép null, mặt định là không
  // Cột ten (NOT NULL): không cho phép null, mặt định là không
  // Cột tuoi(DEFAULT 0,cột NULL Không để gì): cho phép NULL, mặc định là 0
  // Cột luong(DEFAULT 0,cột NULL Không để gì): cho phép NULL, mặc định là 0
  // Cột gioitinh(DEFAULT 0,cột NULL Không để gì): cho phép NULL, mặc định là 0
  // Cột noidung(để trống): Mặt định là NULL, cho phép NULL
  // Cột title (DEFAULT NULL): Mặt định là NULL, cho phép NULL
  // Cột description (DEFAULT NULL): Mặt định là NULL, cho phép NULL
   $ketquamot = mysql_query($sql,$conn);
   if(!$ketquamot){
	  die('Không thể tạo bảng: ' . mysql_error());  
   }else{
	  echo "Tạo tb_nhanvien thành công!"; 
   } 
   // Đóng kết nối database
   mysql_close($conn);
?>

Kết quả:

CREATE TABLE `tb_nhanvien`
Tạo tb_nhanvien thành công!

Giá trị NULL trong Câu lệnh INSERT

Không chèn dữ liệu cho cột NOT NULL trong lệnh INSERT

insert into tb_nhanvien (tuoi,luong,gioitinh,noidung,title,description) values('35','20000000','1','Đang cập nhật','title nhân viên','description nhân viên');
<?php
   $dbhost = 'localhost';
   $dbuser = 'admin_userdata'; // Tên username
   $dbpass = 'xgZwEfQWE'; // Mật khẩu
   // Kết nối đến tên username
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   if(! $conn ){
     die('Không kết nối được: ' . mysql_error());
   }
   // Chọn tên database
   mysql_select_db('admin_tendata');
   // Xét kiểu tiếng việt 
   mysql_query('SET NAMES "utf8"');
   // Không chèn dữ liệu cho cột NOT NULL trong lệnh INSERT
   $sql ="insert into tb_nhanvien (tuoi,luong,gioitinh,noidung,title,description) values('35','20000000','1','Đang cập nhật','title nhân viên','description nhân viên')";
   $ketquain = mysql_query($sql,$conn);
   if(!$ketquain){
	  die('Không thể insert: ' . mysql_error());  
   }else{
	  echo "insert thành công!<br>"; 	   
   }
   // Đóng kết nối database
   mysql_close($conn);
?>

Kết quả:

Không thể insert: Field 'ten' doesn't have a default value

Không insert được bởi vì cột ten không cho phép NULL.

Không chèn dữ liệu cho cột cho phép NULL trong lệnh INSERT

insert into tb_nhanvien (ten) values('Bùi Tấn Lực');
<?php
   $dbhost = 'localhost';
   $dbuser = 'admin_userdata'; // Tên username
   $dbpass = 'xgZwEfQWE'; // Mật khẩu
   // Kết nối đến tên username
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   if(! $conn ){
     die('Không kết nối được: ' . mysql_error());
   }
   // Chọn tên database
   mysql_select_db('admin_tendata');
   // Xét kiểu tiếng việt 
   mysql_query('SET NAMES "utf8"');
   // Không chèn dữ liệu cho cột cho phép NULL trong lệnh INSERT
   $sql ="insert into tb_nhanvien (ten) values('Bùi Tấn Lực')";
   $ketquain = mysql_query($sql,$conn);
   if(!$ketquain){
	  die('Không thể insert: ' . mysql_error());  
   }else{
	  echo "insert thành công!<br>"; 	   
   }
   // Đóng kết nối database
   mysql_close($conn);
?>

Kết quả:

insert thành công!

Cột tuoi, luong, gioitinh mặc định không chèn sẽ có giá trị là 0, cột noidung, title, description mặc định không chèn sẽ có giá trị NULL, những cột này cho phép NULL và có mặc định.

Lệnh WHERE IS NULL đối với Giá trị NULL

select ten,title from tb_nhanvien where title IS NULL;
<?php
   $dbhost = 'localhost';
   $dbuser = 'admin_userdata'; // Tên username
   $dbpass = 'xgZwEfQWE'; // Mật khẩu
   // Kết nối đến tên username
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   if(! $conn ){
     die('Không kết nối được: ' . mysql_error());
   }
   // Chọn tên database
   mysql_select_db('admin_tendata');
   // Xét kiểu tiếng việt 
   mysql_query('SET NAMES "utf8"');
   // Lệnh WHERE IS NULL đối với Giá trị NULL
   echo "<b>Lệnh WHERE IS NULL đối với Giá trị NULL</b><br>";
   $sql ="select ten,title from tb_nhanvien where title IS NULL";
   $ketquamot = mysql_query($sql,$conn);
   if(!$ketquamot){
	  die('Không thể lấy dữ liệu: ' . mysql_error());  
   }
   // Dùng vòng lặp để lấy ra từng hàng trong bảng	
	while($row = mysql_fetch_array($ketquamot, MYSQL_ASSOC)){
		 echo "ten: {$row['ten']} <br> ".
         "title: {$row['title']} <br> ".
         "--------------------------------<br>";
   }	
   // Đóng kết nối database
   mysql_close($conn);
?>

Kết quả:

Lệnh WHERE IS NULL đối với Giá trị NULL
ten: Bùi Tấn Lực
title:
--------------------------------

Lệnh này dùng để tìm những cột có giá trị NULL.

Phân biệt NULL với 0 và chuỗi rỗng trong MySQL

Trong MySQL, NULL, số 0 và chuỗi rỗng '' không mang cùng ý nghĩa. Phân biệt đúng ba trường hợp này giúp dữ liệu phản ánh chính xác trạng thái thực tế và tránh sai kết quả khi truy vấn.

NULL, 0 và chuỗi rỗng khác nhau như thế nào?

NULL biểu thị dữ liệu chưa có, không xác định hoặc không được cung cấp. Đây không phải là số 0 và cũng không phải một chuỗi rỗng.

Giá trị Ý nghĩa Ví dụ
NULL Không có hoặc chưa xác định dữ liệu Chưa biết số điện thoại
0 Một giá trị số cụ thể Số lượng sản phẩm là 0
'' Một chuỗi có độ dài bằng 0 Người dùng chưa nhập tên

Điểm quan trọng là NULL không thể được kiểm tra bằng dấu =. Điều kiện column = NULL không phải cách đúng để tìm dữ liệu NULL. MySQL cung cấp IS NULLIS NOT NULL cho trường hợp này.

Cách kiểm tra NULL, 0 và chuỗi rỗng

Mỗi loại dữ liệu cần được kiểm tra bằng điều kiện phù hợp. Với NULL, sử dụng IS NULL; với số 0 hoặc chuỗi rỗng, có thể dùng phép so sánh thông thường.

SELECT *
FROM users
WHERE phone IS NULL;

SELECT *
FROM products
WHERE quantity = 0;

SELECT *
FROM users
WHERE name = '';

Nếu cần kiểm tra một cột có đồng thời dữ liệu NULL hoặc chuỗi rỗng, có thể kết hợp hai điều kiện bằng OR:

SELECT *
FROM users
WHERE name IS NULL OR name = '';

Cách kiểm tra này giúp phân biệt rõ trường hợp cột chưa có dữ liệu với trường hợp cột đã chứa một giá trị cụ thể nhưng giá trị đó bằng 0 hoặc là chuỗi rỗng.

Khi nào nên sử dụng NULL trong dữ liệu MySQL?

Nên sử dụng NULL khi một thông tin có thể chưa tồn tại, chưa được biết hoặc không bắt buộc phải có. Ví dụ, số điện thoại phụ của người dùng có thể để NULL nếu người dùng chưa cung cấp.

Không nên dùng số 0 hoặc chuỗi rỗng để thay thế NULL chỉ nhằm biểu thị trạng thái “chưa có dữ liệu”. Việc trộn lẫn các cách biểu diễn này dễ khiến truy vấn, thống kê và xử lý dữ liệu cho kết quả không chính xác.

Nếu một cột bắt buộc phải có giá trị, có thể khai báo NOT NULL. Ngược lại, nếu cột cho phép thiếu dữ liệu, việc sử dụng NULL một cách nhất quán sẽ giúp cấu trúc dữ liệu rõ ràng và dễ xử lý hơn.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Giá trị NULL trong MySQL.

Tải file database .sql về nếu muốn kiểm tra hoặc thực hành Tải về.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Giá trị NULL trong MySQL
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !