23

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

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

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

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

4

2 回答 2

43

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

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

如果您使用 CSV 格式:

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

如果您使用 SQL 格式:

  • 设置 -> 导出 -> SQL -> 使用忽略插入
于 2013-08-28T10:48:53.707 回答
9

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

残酷的方式:

TRUNCATE TABLE yourTbl; -- emtpies out the table

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

编写您自己的INSERT查询,带有IGNORE子句:

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

但是,由于您正在导入文件,因此查询很可能是LOAD DATA [LOCAL] INFILE. 正如您在手册中看到的那样,您也可以轻松地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

这要求您可以访问命令行,并运行此命令这是 MySQL 的手册页

使用 phpMyAdmin,在导入时,您会发现一个复选框,上面写着“忽略重复项”,选中它并导入。这是带有屏幕截图的页面
您也可以选择检查“忽略错误”,但这是另一种蛮力方法,我不建议这样做。

于 2013-08-28T10:54:17.310 回答