【问题标题】:how to skip duplicate records when importing in phpmyadmin在 phpmyadmin 中导入时如何跳过重复记录
【发布时间】:2013-08-31 09:29:05
【问题描述】:

我的本​​地机器上有一个数据库,我想将数据导入到我的主机上的数据库。两个 db 是相同的,相同的 table namescolumn names 等。

当我通过phpmyadminimport 从我的本地数据库中export 表通过我的主机上的phpmyadmin 时弹出一个错误,告诉我primary key 有重复的条目并停止整个操作。

如何通过 phpmyadmin 导入数据,跳过重复项,并在流程结束时显示重复项列表?

我可以做的一个解决方案是在我的主机上调用数据库中主键的所有值,并在导入之前过滤重复项。但是我想知道phpmyadmin是否有一个快速的解决方案?

【问题讨论】:

  • @Karl 我看到了那个帖子。但我在 phpmyadmin 导入选项卡中没有看到可以输入 sql 代码的区域?
  • 所以你要做的就是在INSERT 上重复IGNORE(将两者结合起来,你会得到INSERT IGNORE
  • @joespina 您需要编辑您尝试导入的文件。

标签: mysql database import phpmyadmin


【解决方案1】:

在 phpMyAdmin 的设置选项卡中,您可以尝试检查以下值:

  • 设置 -> SQL 查询 -> 忽略多个语句错误

如果您使用的是 CSV 格式:

  • 设置 -> 导入 -> CSV -> 插入错误时不要中止

如果您使用的是 SQL 格式:

  • 设置 -> 导出 -> SQL -> 使用忽略插入

【讨论】:

  • nl-x,请在您的答案中引用“INSERT IGNORE”方法,以防有人真正在搜索它。只是为了阻止其他人提交另一个答案。
  • @Karl:我不明白你的意思。 PhpMyAdmin Export Ignore Insert 是我回答中的第三个要点。
  • @nl-x:我认为 Karl 的意思是,为了使您的答案更完整(并且与将来参考相关),您可能需要考虑添加可以用来执行此操作的实际查询。检查我的答案,我链接到一个页面,其中包含有关如何在 phpMyAdmin 中执行此操作的屏幕,但我花费了更多(实际上是太多)时间/精力来解释可用于将文件导入表的各种查询没有重复问题
  • @EliasVanOotegem 我专注于 OP 问题。即便如此,实际上只有前两个要点是正确答案,因为最终的 OP 想要一个重复项列表。我认为第三个要点以及卡尔的建议不会产生“警告”列表。此外,第三个要点实际上完全符合 Karl 的建议,只是不再涉及文件编辑
  • @nl-x:我并不是说您的答案不正确...而且我错过了说 OP 希望在导入后查看重复项,但是那是我的错。我只想澄清 Karl 的评论:他希望您添加 INSERT IGNORE 以防止这个问题被 “使用 INSERT IGNORE 执行此操作” 答案淹没。就这样。你的确实解决了 OP 的问题,我的没有……我并不矛盾
【解决方案2】:

有几种方法可以做你想做的事:

残酷的方式:

TRUNCATE TABLE yourTbl; -- emtpies out the table

然后导入,但您可能会丢失数据,所以也许创建一个备份表。考虑到所有因素,只是不要这样做,请检查下面列出的替代方案:

编写您自己的 INSERT 查询,使用 IGNORE 子句:

INSERT IGNORE INTO yourTbl -- as shown in the linked duplicate

但是,由于您正在导入文件,因此查询很可能是LOAD DATA [LOCAL] INFILE。正如您在the manual 中看到的那样,您也可以轻松地将IGNORE 添加到该查询中:

LOAD DATA LOCAL INFILE '/path/to/files/filename1.csv' IGNORE -- IGNORE goes here
    INTO TABLE your_db.your_tbl
        FIELDS TERMINATED BY ';'
               OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
    (`field1`,`field2`);

就是这样。如果您不太习惯这样编写自己的查询,请不要担心,还有其他方法可以做您想做的事情:
CLI 方式:

mysqlimport -i dbname fileToImport
# Or
mysqlimport --ignore dbname fileToImport

同样使用 CLI,创建一个包含上述 LOAD DATA 查询的文件,然后:

$: mysql -u root -p
*********** #enter password
mysql> source /path/to/queryFile.sql

这要求您可以访问命令行,并运行此命令Here's the manual page of MySQL

使用 phpMyAdmin,在导入时,您会发现一个复选框,上面写着 “忽略重复项”,检查并导入。 Here's a page with screenshots
您也可以选择检查“忽略错误”,但这是另一种蛮力方法,我不建议这样做。

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多