如何在phpmyadmin中导入时跳过重复记录

Jo *_* E. 19 mysql database import phpmyadmin

我在本地计算机上有一个数据库,我想将数据导入到我的主机上的数据库.这两个数据库的是相同的,相同的table names,column names等等.

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

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

我可以做的解决方案是在托管中调用db中主键的所有值,并在导入之前过滤重复项.但我想知道phpmyadmin是否有快速解决方案?

nl-*_*l-x 38

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

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

如果您使用的是CSV格式:

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

如果您使用的是SQL格式:

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


Eli*_*gem 7

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

野蛮的方式:

TRUNCATE TABLE yourTbl; -- emtpies out the table
Run Code Online (Sandbox Code Playgroud)

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

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

INSERT IGNORE INTO yourTbl -- as shown in the linked duplicate
Run Code Online (Sandbox Code Playgroud)

但是,由于您要导入文件,因此查询很可能是一个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`);
Run Code Online (Sandbox Code Playgroud)

而已.不要担心,如果你不太习惯这样编写自己的查询,还有其他方法可以做你想做的事情:
CLI方式:

mysqlimport -i dbname fileToImport
# Or
mysqlimport --ignore dbname fileToImport
Run Code Online (Sandbox Code Playgroud)

另外CLI,创建一个包含上述LOAD DATA查询的文件,然后:

$: mysql -u root -p
*********** #enter password
mysql> source /path/to/queryFile.sql
Run Code Online (Sandbox Code Playgroud)

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

使用phpMyAdmin,在导入时,你会找到一个复选框,上面写着"忽略重复",检查并导入.这是一个包含屏幕截图的页面
您也可以选择"忽略错误",但这是另一种蛮力方法,我不建议这样做.