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

Có cách dễ dàng thêm nhiều bản ghi trong một truy vấn MySQL?

Có, MySQL hỗ trợ chèn nhiều hàng trong một lệnh INSERT đơn giản bằng cách liệt kê nhiều bộ giá trị.

Cú pháp

INSERT INTO table_name (col1, col2, ...) 
VALUES (val1, val2, ...), (val1, val2, ...), ...;

Tạo bảng

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Value1 INT, Value2 INT, Value3 INT
    -> );

INSERT nhiều hàng một lần

mysql> INSERT INTO DemoTable(Value1, Value2, Value3) 
    -> VALUES (10, 20, 40), (100, 148, 120), (150, 670, 1000), (100000, 200000, 409999);
Query OK, 4 rows affected (0.17 sec)
Records: 4 Duplicates: 0 Warnings: 0

Kết quả

mysql> SELECT * FROM DemoTable;
+----+--------+--------+--------+
| Id | Value1 | Value2 | Value3 |
+----+--------+--------+--------+
| 1  | 10     | 20     | 40     |
| 2  | 100    | 148    | 120    |
| 3  | 150    | 670    | 1000   |
| 4  | 100000 | 200000 | 409999 |
+----+--------+--------+--------+

Ưu điểm so với INSERT riêng lẻ

  • Hiệu năng: Chỉ parse/optimize một lần, giảm round-trip network, ghi binlog một lần
  • Atomicity: Tất cả hàng thành công hoặc tất cả thất bại (trừ khi dùng IGNORE)
  • Auto-increment: Tự động gán ID liên tiếp

Lưu ý

  • Giới hạn kích thước packet: max_allowed_packet (mặc định 4MB/64MB). Với dữ liệu lớn, chia thành nhiều INSERT
  • Số lượng giá trị mỗi hàng phải khớp với số cột
  • Có thể kết hợp với ON DUPLICATE KEY UPDATE cho upsert hàng loạt

INSERT ... SELECT nhiều hàng

INSERT INTO target_table (col1, col2)
SELECT col_a, col_b FROM source_table WHERE condition;

Cách này hiệu quả nhất để sao chép/di chuyển dữ liệu giữa bảng.