插入多行
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');