插入多行

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');