Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thiết lập giá trị mặc định NULL cho cột trong MySQL

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ộtGiá trị mặc định khi INSERT không cung cấp
col INT DEFAULT NULLNULL
col VARCHAR(20) DEFAULT NULLNULL
col INT (không NOT NULL, không DEFAULT)NULL (MySQL mặc định)
col INT NOT NULLLỗi nếu không cung cấp giá trị
col INT DEFAULT 00

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 NULL chỉ có tác dụng khi INSERT không liệt kê cột đó hoặc dùng DEFAULT từ khóa: INSERT ... VALUES (DEFAULT, ...).
  • Nếu cột có NOT NULL mà 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ộc sql_mode (có thể gây lỗi ở mode strict).
  • Khuyến khích: Luôn khai báo rõ DEFAULT NULL hoặc DEFAULT giá_trị để code dễ đọc và tránh bất ngờ.