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

Thêm cột NOT NULL trong MySQL (tạo mới và ALTER)

Thêm cột NOT NULL trong MySQL: 2 trường hợp

Trường hợp 1: Tạo bảng mới với cột NOT NULL

CREATE TABLE tenBang (
    cot1 KIEU_DU_LIEU NOT NULL,
    cot2 KIEU_DU_LIEU
);

Ví dụ:

CREATE TABLE NotNullAtCreationOfTable (
    Id INT NOT NULL,
    Name VARCHAR(100)
);

Chèn NULL vào cột NOT NULL → Lỗi:

INSERT INTO NotNullAtCreationOfTable VALUES (NULL, 'John');
-- ERROR 1048 (23000): Column 'Id' cannot be null

Chèn giá trị hợp lệ → OK:

INSERT INTO NotNullAtCreationOfTable VALUES (1, 'Carol');

Trường hợp 2: ALTER TABLE thêm cột NOT NULL vào bảng có sẵn

ALTER TABLE tenBang ADD tenCotMoi KIEU_DU_LIEU NOT NULL;

Ví dụ:

CREATE TABLE AddNotNull (Id INT, Name VARCHAR(100));
ALTER TABLE AddNotNull ADD Age INT NOT NULL;

Kiểm tra cấu trúc:

DESC AddNotNull;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id    | int(11)     | YES  |     | NULL    |       |
| Name  | varchar(100)| YES  |     | NULL    |       |
| Age   | int(11)     | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

Chèn NULL vào Age → Lỗi. Chèn giá trị → OK.

⚠️ Cảnh quan trọng: Bảng đã có dữ liệu

Nếu bảng đã có hàng, ADD COLUMN ... NOT NULL sẽ THẤT BẠI (không có giá trị mặc định cho hàng cũ).

Giải pháp:

  1. Thêm cột cho phép NULL trước: ADD Age INT NULL
  2. Cập nhật giá trị cho hàng cũ: UPDATE AddNotNull SET Age = 0 WHERE Age IS NULL
  3. Sửa cột thành NOT NULL: ALTER TABLE AddNotNull MODIFY Age INT NOT NULL

Hoặc dùng DEFAULT khi thêm: ADD Age INT NOT NULL DEFAULT 0 (MySQL 8.0.13+ hỗ trợ).