2013-12-22 73 views
0
CREATE TABLE `recipe` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `ethnicityID` int(25) NOT NULL, 
    `recipename` varchar(225) COLLATE utf8_unicode_ci NOT NULL, 
    `recipedescription` text COLLATE utf8_unicode_ci NOT NULL, 
    `recipeprocedure` text COLLATE utf8_unicode_ci NOT NULL, 
    `recipepremium` enum('YES','NO') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'NO', 
    `recipeusercreator` enum('YES','NO') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'NO', 
    `recipecreatorname` varchar(50) COLLATE utf8_unicode_ci NOT NULL, 
    `recipeapprovedby` varchar(50) COLLATE utf8_unicode_ci NOT NULL, 
    `recipeapproveddate` timestamp NULL DEFAULT NULL, 
    `recipestatus` enum('YES','NO') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'NO', 
    `reciperequiresAdultSupervision` enum('YES','NO') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'NO', 
    `category_id` int(12) DEFAULT NULL, 
    `facebookID` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
    `recipetype` varchar(25) COLLATE utf8_unicode_ci NOT NULL, 
    `language` varchar(225) COLLATE utf8_unicode_ci NOT NULL, 
    `app` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `added_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`ID`), 
    KEY `fbID` (`facebookID`), 
    KEY `foreignkey_PerCategory` (`category_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

這是我的MySQL表格語法。無法刪除表中的記錄

當我嘗試運行此查詢

DELETE FROM `recipe` WHERE `ID` IN ('12','13','14','15','16','17','18'); 

我收到以下錯誤

Cannot delete or update a parent row: a foreign key constraint fails (`desifoodapp`.`recipe_image`, CONSTRAINT `recipe_image_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`ID`) ON DELETE NO ACTION ON UPDATE CASCADE) 

我想知道我可以糾正我的表,這樣,如果一個配方被刪除,它的圖像也從recipe_image表中刪除,但配方所屬的類別不會被刪除。它沒有受到影響。

recipe_image見下表

CREATE TABLE `recipe_image` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `recipeimage` varchar(225) DEFAULT NULL, 
    `recipe_id` int(12) DEFAULT NULL, 
    PRIMARY KEY (`ID`), 
    KEY `recipe_id` (`recipe_id`), 
    CONSTRAINT `recipe_image_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`ID`) ON DELETE NO ACTION ON UPDATE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=latin1; 

類別見下表

CREATE TABLE `category` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `categoryname` varchar(225) NOT NULL, 
    `categoryimage` varchar(225) NOT NULL, 
    `facebookID` int(25) NOT NULL, 
    `added_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1; 

回答

2

成全它CASCADE爲刪除以及和嘗試

讓我們假設你有配方表爲主機,其他表只是喜歡上。 當你創建一個外鍵約束時,只需將它們設置爲CASCADE Delete和CASCADE update ,這樣無論何時在主表中進行更改時,也會更新所有其他表。或者,如果你在主表中刪除一條記錄,並檢查所有的外國關鍵環節,並將其刪除所有客戶記錄以及

SET其他表中定義

ON DELETE CASCADE ON UPDATE CASCADE 

這些線路如:recipre_image

CONSTRAINT `recipe_image_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE 
+0

我可以更新沒有DROP和CREATE的表定義? –

+0

是使用「alter table」 – Kirk

+0

我該如何解決這個問題,以便它不會從類別表中刪除任何內容?但從圖像表中刪除項目? –

0

當您正在刪除的表中的any field在另一個表中引用了foreign key並且所引用的表中有任何條目時,您無法進行刪除操作。

相反,您可以使用cascade刪除操作來刪除表和字段引用表中的所有記錄。或者您可以使用在桌子上rule你要刪除

請參考以下鏈接級聯刪除操作: Cascade Delete