Trong MySQL, để đặt giá trị mặc định (default value) cho cột là NULL, sử dụng từ khóa DEFAULT NULL trong định nghĩa cột khi CREATE TABLE hoặc ALTER TABLE.
Ví dụ minh họa
Tạo bảng với 2 cột cho phép NULL và mặc định là NULL:
mysql> CREATE TABLE DemoTable1440 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(20) DEFAULT NULL,
StudentAge INT DEFAULT NULL
);
Chèn dữ liệu với các trường hợp bỏ qua cột:
mysql> INSERT INTO DemoTable1440 (StudentName, StudentAge) VALUES ('Chris', 21);
mysql> INSERT INTO DemoTable1440 VALUES (); -- Tất cả cột mặc định
mysql> INSERT INTO DemoTable1440 (StudentName) VALUES ('David'); -- Age mặc định NULL
mysql> INSERT INTO DemoTable1440 (StudentAge) VALUES (24); -- Name mặc định NULL
Kết quả:
mysql> SELECT * FROM DemoTable1440;
+-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Chris | 21 | | 2 | NULL | NULL | | 3 | David | NULL | | 4 | NULL | 24 | +-----------+-------------+------------+
Các trường hợp DEFAULT NULL
| Định nghĩa cột | Giá trị mặc định khi INSERT không cung cấp |
|---|---|
col INT DEFAULT NULL | NULL |
col VARCHAR(20) DEFAULT NULL | NULL |
col INT (không NOT NULL, không DEFAULT) | NULL (MySQL mặc định) |
col INT NOT NULL | Lỗi nếu không cung cấp giá trị |
col INT DEFAULT 0 | 0 |
Thay đổi DEFAULT cho cột đã tồn tại
-- Đặt mặc định NULL ALTER TABLE DemoTable1440 ALTER StudentAge SET DEFAULT NULL; -- Đặt mặc định giá trị cụ thể ALTER TABLE DemoTable1440 ALTER StudentAge SET DEFAULT 18; -- Xóa mặc định (trở về NULL nếu cho phép NULL) ALTER TABLE DemoTable1440 ALTER StudentAge DROP DEFAULT;
Lưu ý
DEFAULT NULLchỉ có tác dụng khi INSERT không liệt kê cột đó hoặc dùngDEFAULTtừ khóa:INSERT ... VALUES (DEFAULT, ...).- Nếu cột có
NOT NULLmà không cóDEFAULT, MySQL sẽ dùng giá trị "zero" ngầm (0 cho số, '' cho chuỗi, '0000-00-00' cho DATE) — hành vi này phụ thuộcsql_mode(có thể gây lỗi ở mode strict). - Khuyến khích: Luôn khai báo rõ
DEFAULT NULLhoặcDEFAULT giá_trịđể code dễ đọc và tránh bất ngờ.