1

导入旧的 SQL 文件并修复它们时,我不断收到错误,但我被卡住了,无法理解这意味着什么。

ALTER TABLE property ADD CONSTRAINT property_ibfk_1FOREIGN KEY ( intid) REFERENCES interiors( id) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT property_ibfk_2FOREIGN KEY ( owner) REFERENCES accounts( id) ON DELETE SET NULL ON UPDATE CASCADE MySQL 说:文档

1452 - 无法添加或更新子行:外键约束失败(ionicnew. #sql-252c_e1, CONSTRAINT property_ibfk_2FOREIGN KEY ( owner) REFERENCES accounts( id) ON DELETE SET NULL ON UPDATE CASCADE)

表的完整代码property

CREATE TABLE `property` (
  `id` int(11) NOT NULL,
  `x` float NOT NULL,
  `y` float NOT NULL,
  `z` float NOT NULL,
  `a` float NOT NULL,
  `type` bit(32) NOT NULL,
  `intid` int(11) NOT NULL,
  `name` varchar(128) NOT NULL,
  `price` int(11) NOT NULL,
  `mapicon` tinyint(3) UNSIGNED NOT NULL,
  `status` tinyint(3) UNSIGNED NOT NULL,
  `point` int(10) UNSIGNED NOT NULL,
  `saleprice` int(11) NOT NULL DEFAULT '0',
  `owner` int(11) DEFAULT NULL,
  `money` int(11) NOT NULL DEFAULT '0',
  `level` tinyint(3) UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `property`
  ADD PRIMARY KEY (`id`),
  ADD KEY `intid` (`intid`),
  ADD KEY `owner` (`owner`);

ALTER TABLE `property`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=86;

ALTER TABLE `property`
  ADD CONSTRAINT `property_ibfk_1` FOREIGN KEY (`intid`) REFERENCES `interiors` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `property_ibfk_2` FOREIGN KEY (`owner`) REFERENCES `accounts` (`id`) ON DELETE SET NULL ON UPDATE CASCADE;

如果需要,我可以上传完整的 SQL 文件。

4

1 回答 1

2

外键关系涉及一个包含中心数据值的父表,以及一个具有相同值的子表,它们指向其父表。FOREIGN KEY 子句在子表中指定。

如果父表中没有匹配的候选键值,它将拒绝任何尝试在子表中创建外键值的 INSERT 或 UPDATE 操作。

要了解更多信息,请访问此链接

因此,您的错误Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails本质上意味着,您正在尝试向表中添加一行,而表中property没有匹配的行。(intid)interiors

您必须先将该行插入到您的interiors表中。

于 2018-04-09T06:11:08.610 回答