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の行を挿入します。nullを許可する外部キーについてここで見つけることができるすべての投稿を読みました。それが行うことは、nullを許可するように外部キー列(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)

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

私が達成しようとしているのは、テーマからテンプレートとそのアセット(templates_textboxes-> textboxes)へのカスケード削除チェーンを使用することです。ありがとう!

4

1 に答える 1

0

textboxes.idはまだ定義されておらず、であるためAUTO_INCREMENT、その値は最初にに存在する必要がありtemplates_textboxes.textbox_idます。これが、制約が失敗している理由です。

于 2013-03-04T16:02:22.997 に答える