在 MySQL 中若需插入多筆資料,最直覺的方式是重複呼叫 INSERT 語句,但這會導致伺服器重複進行 SQL 分析、最佳化等動作,增加負載。MySQL 提供專有語法,允許在單一 INSERT 語句中一次插入多筆記錄,大幅提升效能。
INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), (value3_1, value3_2, ...);
每組值必須用括號 (...) 包裹,組與組之間以逗號分隔。
INSERT INTO users (name, age)
VALUES
('姚明', 25),
('比爾·蓋茨', 50),
('火星人', 600);
上述語句一次向 users 表插入三筆記錄。
假設有一個單欄位表 table1(n INT),欲插入 5 筆資料:
INSERT INTO table1 (n) VALUES (1, 2, 3, 4, 5);
MySQL 會拋出錯誤:ERROR 1136: Column count doesn't match value count at row 1,因為單一括號內提供了 5 個值,但欄位只有一個。
INSERT INTO table1 (n) VALUES (1), (2), (3), (4), (5);
若省略欄位名稱,則每組括號內的值數量必須與資料表欄位數完全一致:
INSERT INTO table1 VALUES (1), (2), (3), (4), (5);
max_allowed_packet 限制,需依實際資料量調整該參數或分批執行。