MySQL外键约束允许空值不起作用

时间:2013-03-04 15:53:57

标签: mysql foreign-keys

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

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)以允许空值。我尝试过,当我尝试插入文本框时,我收到以下错误:

Error Number: 1452
Cannot add or update a child row: a foreign key constraint fails (`pitchperfect`.`textboxes`, CONSTRAINT `textboxes_to_templates_textboxes` FOREIGN KEY (`id`) REFERENCES `templates_textboxes` (`textbox_id`) ON DELETE CASCADE ON UPDATE NO ACTION)

INSERT INTO `textboxes` (`content`, `columns`, `width`, `height`, `x`, `y`, `z`) VALUES ('', '1', '400', '300', '133', '93', '500')

我想要实现的是从级别,模板及其资产(templates_textboxes - >文本框)中删除链。 谢谢!

1 个答案:

答案 0 :(得分:0)

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