2013-03-14 74 views
1

我有一個使用BEFORE INSERT ON table的MySQL觸發器,它可以計算一個值並在用戶在特定列中插入值後更新同一個表。這按預期工作。但是用戶在輸入時出錯並修復了錯誤,我想編寫一個觸發器,在修復錯誤後更新計算的值。有沒有辦法做到這一點?在同一個表上更新後的MySQL觸發器

+0

TRIGGER AFTER UPDATE? – 2013-03-14 16:16:13

+0

添加BEFORE或AFTER UPDATE觸發器。 – Tom 2013-03-14 16:17:37

回答

5

A BEFORE UPDATE ON table觸發器可以訪問行中現有的值以及新提供的值,並且可以根據所需的任何條件和表達式來設置表中任何列的值。

例如,可以測試一個或多個關注列的值是否已被修改,然後將其他列設置爲某個表達式。

CREATE TRIGGER my_before_update_trigger 
BEFORE UPDATE ON my_table 
FOR EACH ROW 
BEGIN 
    IF NOT ((NEW.col1 <=> OLD.col1) AND (NEW.col2 <=> OLD.col2)) THEN 
     SET NEW.col3 = NEW.col1 * NEW.col2 ; 
    END IF; 
END$$ 
+0

謝謝你,下面你的例子,我做錯了什麼?它抱怨語法錯誤! 'CREATE TRIGGER my_before_update_trigger BEFORE UPDATE ON TmapSlideData FOR EACH ROW BEGIN IF NOT((NEW.MappedReads <=> OLD.MappedReads)AND(NEW.FOV <=> OLD.FOV)) SET NEW.MappedReadsPerFOV = NEW.MappedReads/NEW.FOV; END IF; END $$' – UNagaswamy 2013-03-14 16:55:53

+0

我的例子是缺少'THEN'關鍵字。而'$$'是一個樣本分隔符,您需要一個匹配的(前面的)'DELIMITER $$'語句。而且您可能需要考慮觸發器命名約定,該約定包含觸發器名稱中表的名稱。 (這不是MySQL的要求,但它可以在大型模式中使用,包含大量表格和大量觸發器。)另一個需要考慮的事情是,是否確實需要存儲派生列。該值可以通過在查詢的SELECT列表中包含相關表達式來返回。 – spencer7593 2013-03-14 17:50:57

+0

非常感謝,工作! – UNagaswamy 2013-03-14 19:49:05

相關問題