2015-04-24 22 views
3

我希望你能幫助我。 我使用的是MySQL + PhpMyAdmin,在這個問題中我有2個表。如何在觸發器中放置多個更新?

表1:應收 - ID,ACCOUNT_NAME,網站等等等等...
表2:域 - ID,DOMAIN_NAME,ACCOUNT_NAME

和我插入這些查詢到2個觸發器。

更新
更新域之前,佔更新

集domains.account_name = NULL
其中accounts.website!= domains.domain_name

後更新域,佔
集domains.account_name = accounts.account_name
其中domains.domain_name = main_accounts.website

Wi當我更新帳戶表中的某些內容時,它將自動從域表中刪除account_name,並在更新某個帳戶時放入新的account_name。

下面的圖片將顯示示例。
表尚未更新:
----------
賬表
enter image description here

域表
enter image description here ----------
----------
更新後的視圖。
----------
----------
賬表
enter image description here

域表
enter image description here

所以,在第二個帳戶表格圖像上,我已經更改了域並自動更新了域表。我只想讓一個觸發器包含這2個更新查詢。我不知道是否可能,因爲在完成這個之後,我可能還需要知道如何從1個觸發器更新多個不同的表格。我之所以問,是因爲我需要爲每個正在使用的子表分配帳戶名稱。例如,主表賬目表和需要更新的子表是:
domains.account_name
ip_address.account_name
phones.account_name
payments.account_name

所以,我不t知道當更新主表「accounts」時是否甚至可以更新列「account_name」下的那些子表。

謝謝。我希望我的問題很清楚。 :D:D

+0

也許考慮您的標準化結構,這樣你就不需要這麼做。話雖如此,你可以將多個語句依次放入觸發器中。強烈的謹慎 - 考慮如果有人直接更新「低級」表會發生什麼...... – Randy

+1

謝謝蘭迪您的評論。不幸的是,出於某種原因,當我使用「; MySQL」時:「#1064 - 你的SQL語法有錯誤」錯誤。在每個...謝謝 –

回答

3

您可以使用BEGIN和END將多個語句分組到觸發器中。

例子:

DELIMITER $$ 

CREATE TRIGGER my_trigger BEFORE INSERT ON accounts 
FOR EACH ROW 
BEGIN 
    -- Statement one 
    UPDATE domains 
    SET domains.account_name = accounts.account_name 
    WHERE domains.domain_name = main_accounts.website; 
    -- Statement two 
    UPDATE another_table 
    SET another_table.column_name = accounts.account_name 
    WHERE another_table.domain_name = accounts.some_column; 
    -- More UPDATE statements 
END$$ 
+0

你好,謝謝..我嘗試了它,它創建了一個觸發器,但由於某種原因,它只保存/記錄了第一條語句。當我打開觸發器時,第二個聲明不在那裏...... –

+0

其實,它工作!哈哈謝謝你! :d –