如何使用一个插入语句插入多个项目,同时检测唯一列是否具有重复值?

时间:2015-07-07 22:25:43

标签: php mysql sql-server database pdo

如果已存在相同的问题,请将其标记为重复。

我正在使用MySQL进行插入,而我正在使用PDO预处理语句。我现在想要将一个行数组插入到数据库中。类似的问题可以在Multiple Values Insert with PDO Prepared Statements找到。但是,作者没有考虑在唯一列上发生重复的情况。例如,请考虑下表:

id    name    counter

其中name具有唯一属性,并且每当尝试插入现有name时,计数器增加1.现在我想插入一个具有三个名称的数组,如下所示:

$name_array = array('User A','User B','User C');

假设我的表目前只有用户A且其对应的计数器为1.在这种情况下,我希望插入后的表格如下:

id    name      counter
1     User A    2
2     User B    1
3     User C    1

我可以使用一个插入语句来完成它吗?如果是,那怎么办?

1 个答案:

答案 0 :(得分:1)

首先:恕我直言,这与PHP,PDO或预备语句无关 - 它是关于在特殊情况下将INSERT转换为UPDATE

就是这样,我会通过使用INSERT ON DUPLICATE KEY UPDATE构造来解决这个问题,在

的某处。
INSERT INTO tablename(name)
VALUES ('User A'), ('User B'), ('User C')
ON DUPLICATE KEY UPDATE counter=counter+1;

如何将此查询发送到MySQL服务器(无论是PHP / PDO还是其他)都不重要。