2010-10-17 180 views
1

我有組,每個組都有與之關聯的聯繫人。當用戶刪除一個組時,如果該組不爲空,那麼它會提醒他們,如果該組中的所有聯繫人都繼續,將會被刪除。無論如何,所以我的問題是設置該功能。從另一個表中刪除特定行時刪除表中的行

我試圖找出如何刪除屬於該組並刪除該組以及所有聯繫人。

在我繼續之前,我想知道,但有沒有一種通過外鍵做到這一點的自動化方式?

那麼,如果沒有它的確定,這是我的查詢,但SQL Workbench是拋出以下錯誤

DELETE c 
FROM `list_`.`contacts` AS c 
INNER JOIN `list_`.`groups` AS g ON c.group_id = g.id 
WHERE g.group = 'School' 
    AND c.user_id = 2; 

錯誤:

Error Code: 1046 No database selected 

真的很困惑在這裏,也是我自己也嘗試c.*

+0

您正在尋找級聯刪除可能('上delete') – vittore 2010-10-17 04:16:55

+0

你嘗試過'DELETE FROM ...'? – vittore 2010-10-17 04:22:47

+0

CREATE TABLE觸點 ( ID SMALLINT UNSIGNED NOT NULL PRIMARY KEY, 描述VARCHAR(40), 外鍵(GROUP_ID)參考文獻基團(ID) ON DELETE CASCADE ON UPDATE CASCADE); – vittore 2010-10-17 04:24:40

回答

2

在一條語句MySQL supports multi-table deletions - 使用:

DELETE c, g 
    FROM `list_`.`contacts` AS c 
    JOIN `list_`.`groups` AS g ON c.group_id = g.id 
          AND g.group = 'School' 
WHERE c.user_id = 2; 

對於錯誤代碼1046,使用工作臺時,請確保相應的數據庫/目錄在下拉菜單中的對象瀏覽器選項卡中找到以上選擇。您可以指定連接的默認模式/數據庫/目錄 - 單擊工作臺啓動畫面的SQL開發標題下的「管理連接」選項。

+0

我嘗試了類似於您的建議,但我的問題在於錯誤代碼1046,沒有選擇數據庫不會消失。不知道該怎麼做 – Eli 2010-10-17 04:41:17

+0

@ s2xi:看到我的附加評論 - 你建立了與數據庫的連接,但它需要一個模式/數據庫/目錄上下文。在查詢中擁有數據庫是不夠的。 – 2010-10-17 04:42:56

0

我認爲你可以用觸發器來做到這一點。

+0

我該怎麼做? – Eli 2010-10-17 04:19:07

1

你不說出你的RDBMS,但在SQL Server 你可以打開級聯刪除,我不會建議這樣做;這太危險了。

更新:MySQL的InnoDB支持級聯刪除,以及:FOREIGN KEY Constraints

它是安全的第一手動刪除所有引用行,然後刪除該組。

錯誤消息「Error Code: 1046 No database selected」表明,這不是你的錯TSQL。你是否指向一個數據庫?

+0

我使用的InnoDB – Eli 2010-10-17 04:18:43

+0

嗯,好吧,我想我會去手動的方式。畢竟我只需要設置它一次,讓PHP爲我做重複的工作;-)但是關於我的查詢,最新的錯誤? – Eli 2010-10-17 04:20:13

+0

那麼你是否在說使用約束條件將是一條路? – Eli 2010-10-17 04:23:48

1

在MySQL中,你可以嘗試這樣的觸發:

DELIMITER $$ 
DROP TRIGGER IF EXISTS `deluser`$$ 

CREATE TRIGGER `deluser` BEFORE DELETE on `biguser` 
FOR EACH ROW 
BEGIN 
DELETE FROM smalluser WHERE id=OLD.id; 
END$$ 

DELIMITER ; 

注:觸發必須是之前刪除,否則你可能會失去你想用來刪除記錄的關鍵。