插入多行

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