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

Thêm ràng buộc NOT NULL cho cột đã tồn tại trong MySQL (ALTER TABLE)

Vấn đề: Sửa đổi cột hiện có để bắt buộc NOT NULL

Cột UserName hiện cho phép NULL. Cần thay đổi thành NOT NULL.

Giải pháp: ALTER TABLE ... MODIFY COLUMN ... NOT NULL

1. Tạo bảng (UserName cho phép NULL)

CREATE TABLE DemoTable (
    UserId INT,
    UserName VARCHAR(20)
);

2. Thay đổi cột thành NOT NULL

ALTER TABLE DemoTable 
MODIFY UserName VARCHAR(20) NOT NULL;

3. Kiểm tra cấu trúc (DESC)

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| UserId   | int(11)     | YES  |     | NULL    |       |
| UserName | varchar(20) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

Cột Null = NO → NOT NULL.

4. Test chèn NULL (sẽ lỗi)

INSERT INTO DemoTable VALUES (101, NULL);
ERROR 1048 (23000): Column 'UserName' cannot be null

5. Chèn hợp lệ

INSERT INTO DemoTable VALUES (101, 'Chris'), (102, 'Bob');

Lưu ý quan trọng

  • Nếu bảng đã có dữ liệu NULL trong cột này, ALTER TABLE ... NOT NULL sẽ THẤT BẠI. Phải cập nhật NULL thành giá trị mặc định trước:
    UPDATE DemoTable SET UserName = 'Unknown' WHERE UserName IS NULL;
    ALTER TABLE DemoTable MODIFY UserName VARCHAR(20) NOT NULL;
  • MODIFY giữ nguyên tên cột. Dùng CHANGE nếu muốn đổi tên cột.
  • Có thể kết hợp nhiều thay đổi: MODIFY UserName VARCHAR(50) NOT NULL DEFAULT 'Guest'.

Best practice

  • Thiết kế NOT NULL từ đầu khi tạo bảng (CREATE TABLE ... col VARCHAR(20) NOT NULL).
  • Dùng DEFAULT để tránh phải cung cấp giá trị khi INSERT.