1


1

MYSQL:子行を追加または更新できません:外部キー制約が失敗します

私はエラーを得ています:

子行を追加または更新できません:外部キー制約が失敗します( mydb / requests、CONSTRAINT` requests_ibfk_5` FOREIGN KEY( fixture_id)REFERENCES` fixtures`( fix_id)ON UPDATE CASCADE ON DELETE CASCADE)

私は以下のようなテーブル構造を持っています。

CREATE TABLE IF NOT EXISTS `requests` (
  `request_id` int(11) unsigned NOT NULL auto_increment,
  `fixture_id` int(11) unsigned NOT NULL,
  `user_id` int(11) unsigned NOT NULL,
  `date_added` datetime NOT NULL,
  `date_modified` datetime default NULL,
  PRIMARY KEY  (`request_id`),
  UNIQUE KEY `fixture_id_2` (`fixture_id`,`user_id`),
  KEY `user_id` (`user_id`),
  KEY `date_added` (`date_added`),
  KEY `fixture_id` (`fixture_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=17 ;


CREATE TABLE IF NOT EXISTS `fixtures` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `fix_id` int(11) unsigned NOT NULL default '0',
  `fixture_date` date default NULL,
  `kickoff` time default NULL,
  `venue` varchar(35) default NULL,
  `home_score` tinyint(4) default NULL,
  `away_score` tinyint(4) default NULL,
  `date_added` datetime default NULL,
  `date_modified` datetime default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `fix_id` (`fix_id`),
  KEY `fixture_date` (`fixture_date`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=383 ;


ALTER TABLE `requests`
  ADD CONSTRAINT `requests_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE,
  ADD CONSTRAINT `requests_ibfk_5` FOREIGN KEY (`fixture_id`) REFERENCES `fixtures` (`fix_id`) ON DELETE CASCADE ON UPDATE CASCADE;

子テーブル(要求)に共有ID(fixture_id)を持つ親テーブル(fixtures)のfix_idフィールドのレコードを更新すると、上記のエラーが発生します。

この整合性制約が失敗する理由がわかりません。 両方のテーブルには、カスケードすべき正しいデータがすでにありますか?

任意の助けは大歓迎です。

2 Answer


0


これはすべて私自身のエラーでした。 現実には、同じ分野に2つの外国の制約がありました。 私はちょうど1つを取る必要がありました。


0


このエラーは、他のテーブルの参照が原因で発生します。両方のテーブルに同じID /データが存在する必要があります。 そうでない場合は、where条件を使用して、既存のデータを削除しないでください。

例update tablename a set = 'field'(othertable bからフィールドを選択)a.data = b.data;