2010-08-18 108 views
1

我收到錯誤:MYSQL:不能添加或更新子行,外鍵約束失敗

不能添加或更新子行,外鍵約束失敗(mydb/requests,約束requests_ibfk_5外鍵(fixture_id )參考文獻fixturesfix_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; 

如果我更新了fix_id記錄字段父表(fixtures),在子表(請求)中有一個共享ID(fixture_id)我得到上述錯誤。

我看不出爲什麼這個完整性約束失敗。兩個表都已經有了應該級聯的正確數據?

任何幫助非常感謝。

+0

有沒有fix_id'0'這是你的默認值? – extraneon 2010-08-18 12:09:45

+0

不,我沒有在任何一個表中有0的記錄。 – 2010-08-18 12:17:08

回答

0

這是我自己的錯誤。在現實中,我在同一領域有兩個國外限制。我只需要關掉一個。

0

由於其他表的引用而發生此錯誤,在兩個表中都應存在相同的ID /數據。如果不是,請使用條件刪除不存在的數據。

示例 更新表名a set ='field'(從其他b選擇字段)其中a.data = b.data;

相關問題