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

INSERT INTO SELECT vào bảng có AUTO_INCREMENT trong MySQL

Vấn đề: Chèn dữ liệu vào bảng có khóa chính AUTO_INCREMENT từ SELECT

Cần chèn hàng vào bảng có cột UserId AUTO_INCREMENT, nhưng vẫn muốn kiểm soát giá trị ID (hoặc để tự động sinh).

Giải pháp: INSERT INTO ... SELECT với danh sách cột

Chỉ định cột đích (kể cả cột AUTO_INCREMENT nếu muốn gán giá trị cụ thể).

1. Tạo bảng

CREATE TABLE DemoTable (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserName VARCHAR(20)
);

2. Chèn với chỉ định UserId (ghi đè AUTO_INCREMENT)

INSERT INTO DemoTable (UserId, UserName) 
SELECT 101 AS UserId, 'Chris' AS UserName;

INSERT INTO DemoTable (UserId, UserName) 
SELECT 102 AS UserId, 'Robert' AS UserName;

INSERT INTO DemoTable (UserId, UserName) 
SELECT 103 AS UserId, 'Sam' AS UserName;

3. Kết quả

+--------+----------+
| UserId | UserName |
+--------+----------+
|    101 | Chris    |
|    102 | Robert   |
|    103 | Sam      |
+--------+----------+

Lưu ý quan trọng

  • Nếu không chỉ định UserId trong danh sách cột, MySQL sẽ tự động sinh giá trị AUTO_INCREMENT (bỏ qua giá trị trong SELECT).
  • Nếu có chỉ định UserId, giá trị trong SELECT sẽ được dùng (phải duy nhất, không trùng khóa chính).
  • Sau khi chèn giá trị lớn (103), lần INSERT sau không chỉ định UserId sẽ sinh từ 104.
  • Cần quyền INSERT và (nếu ghi đè AUTO_INCREMENT) thường cần quyền SUPER hoặc cấu hình auto_increment_offset/increment.

Ví dụ: Chèn từ bảng khác, để AUTO_INCREMENT tự sinh

INSERT INTO DemoTable (UserName) 
SELECT ClientName FROM SourceTable;

MySQL sẽ tự gán UserId = 104, 105, ...