5

可能重复:
如何在 MySQL 中“如果不存在则插入”?

有SQL表:

CREATE TABLE IF NOT EXISTS `MyTable` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `MyVar` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 

并且有两个 PHP 数组arr1[]=array("abc","bcd")arr2[]=array("abc","cde").

假设我已将 arr1[] 值保存到 SQL 表中。现在假设我需要将 arr2[] 值保存到同一个 SQL 表中。为了避免重复保存“abc”条目,我需要编写哪个 SQL INSERT 查询?结果必须是:

MyTable:
1  |  abc
2  |  bcd
3  |  cde

但不是:

MyTable:
1  |  abc
2  |  bcd
3  |  abc
4  |  cde

更新:也许应该以忽略重复条目的方式创建/定义 MyTable?

4

3 回答 3

6

有 3 种可能的解决方案:使用INSERT IGNOREREPLACEINSERT ... ON DUPLICATE KEY UPDATE。检查这篇文章

如果该解决方案适合您,您还可以在内存中与数组相交,然后仅插入唯一值。

于 2012-08-29T11:55:29.827 回答
1

在你的桌子上做MyVar一样。UNIQUE

像这样:

CREATE TABLE IF NOT EXISTS `MyTable` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `MyVar` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `myvaridx` (`MyVar`)
);

或者,如果您无法重新创建表,请使用

ALTER TABLE `request`
ADD UNIQUE INDEX `myvaridx` (`MyVar`)
于 2012-08-29T11:59:26.280 回答
0

将 SQL 用于此类任务将是一种浪费。

我建议使用“array_merge”函数来合并数组,然后使用“array_unique”函数来处理重复。

然后将唯一值插入数据库。

于 2012-08-29T12:00:28.553 回答