【问题标题】:mysqlimport: Error: 1452mysqlimport:错误:1452
【发布时间】:2013-09-13 11:37:41
【问题描述】:

我用 Perl 编写了一个创建数据库模式的脚本:

CREATE TABLE descType (
    id MEDIUMINT unsigned PRIMARY KEY,
    descr MEDIUMTEXT)ENGINE=InnoDB;

CREATE TABLE taxType (
    id MEDIUMINT unsigned PRIMARY KEY,
    descr TEXT not null)ENGINE=InnoDB;

CREATE TABLE uniref(
            id INT unsigned PRIMARY KEY,
            seqId varchar (50) not null,
            descId MEDIUMINT unsigned not null,
            n MEDIUMINT unsigned not null,
            taxId MEDIUMINT  unsigned not null,
            repId varchar (50) not null,
            foreign KEY (descId) REFERENCES descType(id),
            FOREIGN KEY (taxId) REFERENCES taxType(id),
            unique(seqId)
            )ENGINE=InnoDB; 

当我使用这个命令时:

system qq(mysqlimport -u$mySqlUser -p$mySqlPass $database $table --local --fields-terminated-by="\t" --lines-terminated-by="\r\n") )== 0
   or die "ERROR: an error occurred while importing $table in $database. $?";

我收到此错误:

mysqlimport: Error: 1452, Cannot add or update a child row: a foreign key 
constraint fails (`uniref_2013_08`.`uniref`, CONSTRAINT `uniref_ibfk_1` 
FOREIGN KEY (`descId`) REFERENCES `descType` (`id`)), when using 
table: uniref

我不知道我做错了什么。我在另一台机器上使用相同的脚本,它工作正常。

【问题讨论】:

  • 您在 desctype 表中缺少外键。
  • 我读到:“外键关系涉及一个包含中心数据值的父表,以及一个具有相同值的子表指向其父表。FOREIGN KEY 子句在子表中指定. 父子表必须使用相同的存储引擎。它们不能是 TEMPORARY 表。我继续阅读(dev.mysql.com/doc/refman/5.0/en/create-table-foreign-keys.html)。我不知道我必须在父表中写相同的外键。他们说必须在孩子中指定。实际上孩子是uniref表。我错了吗?
  • 您想将子代插入uniref,它引用了descType 中不存在的父代
  • 我真的没有...我相信已经指定了它。请你给我写一下表格的正确定义是什么?
  • 定义可以,但数据不行。如果没有父行,外键可保持数据完整性并防止插入。您需要先填充父表。

标签: mysql perl foreign-keys mysqlimport


【解决方案1】:

如果没有父行,外键可保持数据完整性并防止插入。您需要先填充descType 父表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2013-11-15
    • 2013-02-15
    • 2016-02-17
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多