2011-06-28 84 views
0

我有三個關聯的表。一個類別包含了用戶在輸入值的選項,在下面的簡化...多個表中的MySQL更新...觸發器?級聯?

group 
----- 
id 
name 
active 

option 
------ 
id 
group_id 
name 
active 

user_option 
----------- 
id 
opton_id 
value 
active 

我的問題是什麼是處理其中一組被禁用的情況下的最佳途徑。我在過去所做的是查找選項ID的位置group_id =正被停用的組ID。然後我拿回來的id的列表,並停用user_option像...

set active=0 where option_id in (list of ids) 

然後我更新選項,然後我更新組。

我很感興趣,如果有辦法用觸發器或級聯做這種事情。我從來沒有在MySQL中使用過,我想我會看到這個問題的最佳方法是什麼。

回答

0

ON UPDATE CASCADE添加到USER_OPTION.active列的外鍵應該是實現所需功能所需的全部功能per the documentation。假設外鍵約束已經到位,請使用:

ALTER TABLE 
MODIFY active FOREIGN KEY fk_name (active) REFERENCES OPTION(active) ON UPDATE CASCADE 
+0

如果是MyISAM,請參閱FKeys不受支持。會不會有一個觸發選項來查找/更新,還是基本上和「老」的方式一樣?謝謝。 – Don

+0

@Don:不知道我在哪裏讀過它,但我認爲這是視爲InnoDB表,因爲是的,您必須使用相同功能的觸發器。 –

+0

謝謝。這些表格目前是ISAM,但我正在評估選擇/插入負載,以查看是否有意義將其轉換爲增加的靈活性。 – Don