避免使用受约束的INSERT循环MySQL查询

时间:2012-10-24 18:02:32

标签: php mysql

我理解为什么我们不应该循环MySQL查询,我试图避免它。我有一个数组$names,其中包含要插入someTable的关键字列表,在MySQL字段UNIQUE上有name约束:

mysql> select * from someTable where name='stress';
+-----+--------+
| id  | name   |
+-----+--------+
| 143 | stress |
+-----+--------+
1 row in set (0.00 sec)

mysql> insert into someTable (name) values ('stress');
ERROR 1062 (23000): Duplicate entry 'stress' for key 'name'
mysql>

我更希望查询以下类型以避免循环:

$result = mysql_query("insert into someTable (name) values ('firstName'), ('secondName'), ('thirdName')");

但是,如果已存在任何名称,则不会插入任何值。此外,$result的值为FALSE如何构建单个查询以插入值,如果存在任何值,则不会失败,如果插入了任何值,它们将返回TRUE

我知道我可以为此编写一个存储过程,但这只会将循环从PHP移动到MySQL。除了带宽(不是关键,因为这是在localhost上)似乎没有保存任何东西。

2 个答案:

答案 0 :(得分:4)

INSERT IGNORE INTO someTable (name) values ('firstName'), ('secondName'), ('thirdName')

如果有重复,则会忽略并继续。

答案 1 :(得分:3)

使用ignore。

例如: insert ignore into someTable (name)...