插入多行
INSERT INTO `my_table` (`field_1`, `field_2`) VALUES
('data_1', 'data_2'),
('data_1', 'data_3'),
('data_4', 'data_5');
這是使用一個 INSERT
語句一次新增多行的簡單方法。
這種批量插入比逐行插入行快得多。通常,以這種方式在單個批量插入中插入 100 行的速度是單獨插入所有行的 10 倍。
忽略現有行
匯入大型資料集時,在某些情況下,最好跳過通常會導致查詢因列限制而失敗的行,例如重複的主鍵。這可以使用 INSERT IGNORE
來完成。
考慮以下示例資料庫:
SELECT * FROM `people`;
--- Produces:
+----+------+
| `id` | name |
+----+------+
| 1 | john |
| 2 | anna |
+----+------+
INSERT IGNORE INTO `people` (`id`, `name`) VALUES
('2', 'anna'), --- Without the IGNORE keyword, this record would produce an error
('3', 'mike');
SELECT * FROM `people`;
--- Produces:
+----+--------+
| `id` | name |
+----+--------+
| 1 | john |
| 2 | anna |
| 3 | mike |
+----+--------+
要記住的重要一點是, INSERT IGNORE 也會默默地跳過其他錯誤,這是 Mysql 官方文件中說的:
如果未指定 IGNORE,則會觸發錯誤的資料轉換將中止語句。使用 IGNORE,將無效值調整為最接近的值並>插入; 產生警告,但宣告不會中止。
注意: - 為了完整起見,新增以下部分,但不被視為最佳實踐(例如,如果在表中新增了另一列,則會失敗)
如果為表中的所有列指定相應列的值,則可以忽略 INSERT
語句中的列列表,如下所示:
INSERT INTO `my_table` VALUES
('data_1', 'data_2'),
('data_1', 'data_3'),
('data_4', 'data_5');