2013-07-22 77 views
1

我在我的數據庫中的兩個表與下面的模式:MySQL在刪除設置默認

locations (
location_id INT PRIMARY KEY, 
location VARCHAR 
) 

venues (
venue_id INT PRIMARY KEY, 
venue VARCHAR, 
venue_location INT FOREIGN KEY locations(location_id) 
ON DELETE CASCADE 
) 

一個大問題引起,當我需要刪除的位置,但不場地。我怎樣才能刪除只有地點,但沒有相同的location_id地點。我該怎麼做才能達到這個要求。

示例數據:

/*locations table and data*/ 
locations(1, "Kathmandu"); 
locations(2, "Ilam"); 
locations(3, "Fikkal"); 

/*venues table and data*/ 
venues(1, "Green View Hotel and Lodge", 2); 
venues(2, "Hyatt Hotel and Lodge", 1); 
venues(3, "Abc Hotel", 3); 

我怎麼才能把locations位置 「Fikkal」,而不影響venues 「ABC飯店」。我知道ON DELETE CASCADE正在刪除場地中的一排,同時刪除了相同ID的位置。但是,如果我刪除ON刪除CASCADE mysql說FK約束失敗,它也明顯。你將如何解決這樣的問題。

我在想什麼作爲一個解決方案是在locations表中創建一個默認位置如下圖所示:

位置(0,「默認位置」);

並執行類似ON DELETE SET DEFAULT但真的不知道如何。

但我覺得有一些professionalstandard方式來處理這個問題。任何想法請。

謝謝

回答

0

您可以允許空值venue_location和刪除設置爲NULL。顯然也可以有其他解決方案。但是這對你來說似乎是最簡單的。

0

那麼,如果場地沒有找到位置,那麼您可能會知道如何處理其餘的功能。

如果你希望能夠與連接到它,你應該簡單地做這個場館刪除位置:

venues (
    venue_id INT PRIMARY KEY, 
    venue VARCHAR, 
    venue_location INT FOREIGN KEY locations(location_id) 
    ON DELETE NO ACTION 
)  

我指的是「不採取行動」

+0

替換「CASCADE」但是,這voilate外鍵參考約束並不好。 – Guanxi

+0

當然這並不好,但這是他的要求,我在頂部說過,我確信他知道如何處理功能。 – 2013-07-22 13:17:20