0

我似乎无法弄清楚为什么我的外键约束不起作用。这是我的表架构:

CREATE TABLE `templates_textboxes` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `template_id` int(10) unsigned DEFAULT NULL,
  `textbox_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `templates_textboxes_to_templates_idx` (`template_id`),
  KEY `templates_textboxes_to_textboxes_idx` (`textbox_id`),
  CONSTRAINT `templates_textboxes_to_templates` FOREIGN KEY (`template_id`) REFERENCES `templates` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1$$

CREATE TABLE `textboxes` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `content` text NOT NULL,
  `columns` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `width` int(5) unsigned NOT NULL DEFAULT '0',
  `height` int(5) unsigned NOT NULL DEFAULT '0',
  `x` int(5) unsigned NOT NULL DEFAULT '0',
  `y` int(5) unsigned NOT NULL DEFAULT '0',
  `z` int(5) unsigned NOT NULL DEFAULT '500',
  PRIMARY KEY (`id`),
  CONSTRAINT `textboxes_to_templates_textboxes` FOREIGN KEY (`id`) REFERENCES `templates_textboxes` (`textbox_id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8$$

当我在 PHP 中创建文本框时,首先我插入文本框以获取 ID,然后在匹配表 templates_textboxes 中插入一行,其中包含模板 ID 和新文本框 ID。我已经阅读了我可以在这里找到的关于允许空值的外键的每一篇文章,它所说的只是将外键列 (templates_textboxes.textbox_id) 设置为允许空值。我试过了,当我尝试插入文本框时,出现以下错误:

错误号:1452
无法添加或更新子行:外键约束失败(`pitchperfect`.`textboxes`, CONSTRAINT `textboxes_to_templates_textboxes` FOREIGN KEY (`id`) REFERENCES `templates_textboxes` (`textbox_id`) ON DELETE CASCADE ON UPDATE NO ACTION)

插入“文本框”(“内容”、“列”、“宽度”、“高度”、“x”、“y”、“z”)值(“”、“1”、“400”、“300” , '133', '93', '500')

我想要完成的是从主题到模板及其资产(templates_textboxes -> textboxes)的级联删除链。谢谢!

4

1 回答 1

0

由于textboxes.idis 尚未定义并且 is AUTO_INCREMENT,该值必须首先存在于templates_textboxes.textbox_id. 这就是约束失败的原因。

于 2013-03-04T16:02:22.997 回答