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

Chèn dữ liệu MySQL không cần liệt kê tên cột (INSERT VALUES chỉ giá trị)

Giới thiệu

MySQL cho phép INSERT INTO table VALUES (...) bỏ qua danh sách cột, miễn là cung cấp giá trị cho tất cả cột theo đúng thứ tự định nghĩa bảng. Cột AUTO_INCREMENT có thể truyền NULL hoặc DEFAULT.

Ví dụ thực hành

1. Tạo bảng DemoTable862 (Id AUTO_INCREMENT NOT NULL)

mysql> CREATE TABLE DemoTable862 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName VARCHAR(100),
    Age INT
);

2. Chèn 5 hàng không liệt kê cột, truyền NULL cho Id

mysql> INSERT INTO DemoTable862 VALUES 
    (NULL,'Chris',23),(NULL,'Robert',21),(NULL,'Mike',24),(NULL,'Sam',25),(NULL,'Bob',26);

3. Kết quả: Id tự động gán 1..5

+----+-----------+------+
| Id | FirstName | Age  |
+----+-----------+------+
|  1 | Chris     |   23 |
|  2 | Robert    |   21 |
|  3 | Mike      |   24 |
|  4 | Sam       |   25 |
|  5 | Bob       |   26 |
+----+-----------+------+

Quy tắc và lưu ý

Điều kiệnKết quả
Số giá trị ≠ số cộtLỗi: Column count doesn't match value count
Cột NOT NULL không có DEFAULT, truyền NULLLỗi (trừ AUTO_INCREMENT)
Cột AUTO_INCREMENT truyền NULL/0/DEFAULTTự động gán giá trị tiếp theo
Thay đổi thứ tự cột (ALTER TABLE ADD COLUMN FIRST)INSERT VALUES sẽ sai cột → dữ liệu sai/lỗi

Khuyến nghị: LUÔN liệt kê cột

-- Tốt (an toàn, rõ ràng, bảo vệ khi schema thay đổi)
INSERT INTO DemoTable862 (FirstName, Age) VALUES ('Chris', 23);

-- Tránh (rủi ro)
INSERT INTO DemoTable862 VALUES (NULL, 'Chris', 23);
  • Code bảo trì dễ dàng hơn.
  • Không bị phá vỡ khi thêm cột mới (với DEFAULT) hoặc đổi thứ tự cột.
  • Rõ ràng ý đồ: cột nào nhận giá trị gì.

INSERT ... SET (MySQL extension)

INSERT INTO DemoTable862 SET FirstName = 'Chris', Age = 23;

Cú pháp này cũng không cần liệt kê tất cả cột, tự động dùng DEFAULT cho cột còn lại.