【问题标题】:mysql import for self reference table skipping recordsmysql导入自引用表跳过记录
【发布时间】:2020-07-02 10:02:18
【问题描述】:

我正在尝试以编程方式将表和数据从一个数据库迁移到另一个数据库。

源数据库和目标数据库是 MySQL。我正在使用 mysql import 命令从 sqldump 插入数据。我有一个自我相关的表(比如图像表)。每当我为此表执行 mysql 导入时,我都会看到某些记录被跳过。我不明白它们被跳过的原因,尝试了 --verbose 和 --debug 选项,不知道为什么这些不起作用。

我尝试了一些东西,

  1. 首先我尝试使用 mysql import 导入数据,我们跳过了 100/209 条记录。 结果 => Records:209 Deleted:0 Skipped:100 Warning:100
  2. 然后我尝试再次导入相同的 sql 转储文件,现在插入了剩余的 100 条记录,跳过了已经插入的 109 条记录。结果 => Records:209 Deleted:0 Skipped:109 Warning:109

我可以在目标数据库表中看到 209 条记录。

表格有related_image 列,说明所有图像与该特定ID 相关。

所以,看起来关系太深了,需要 N 次才能获取所有记录。有没有办法使用 mysql import 中的某些选项一次插入所有数据?

#!/bin/sh
MYSQLDUMP="mysqldump --login-path=$dest_loc$env"
MYSQLIMPORT="mysqlimport --login-path=$dest_loc$env"
#disable constraints
$MYSQL --database $dest_db -e "ALTER TABLE $table_name DISABLE KEYS; SET FOREIGN_KEY_CHECKS=0;"
#import data
$MYSQLIMPORT --columns "Id, Created, Status, Updated, ImageName, ImageType, MediaType, Sequence, Tag, ReceiptId, RelatedImageId, OriginalCreateDate, ContentLength"  --lines-terminated-by="\n" --fields-terminated-by=',' --fields-optionally-enclosed-by="'" $dest_db $image_dump_source_file
#enable constraints
$MYSQL --database $dest_db -e "SET FOREIGN_KEY_CHECKS=1; ALTER TABLE $table_name ENABLE KEYS;"

不想重复两次mysql导入,不知道单条命令的导入方式是什么。

如果有人知道,请告诉我。

【问题讨论】:

  • 禁用 FK,导入,启用 FK?
  • @P.Salmon,是的。

标签: mysql mysqlimport


【解决方案1】:

找到适合我的解决方案

假设表中的记录相互依赖,我尝试对表进行排序,首先转储子行,然后转储父行。

对于上表,用于按相关ID对记录进行排序,在我的情况下,子记录的ID大于父记录。

上图中按relatedID排序的行看起来一样,最后插入到表中

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多