【发布时间】: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