我有一個使用BEFORE INSERT ON table
的MySQL觸發器,它可以計算一個值並在用戶在特定列中插入值後更新同一個表。這按預期工作。但是用戶在輸入時出錯並修復了錯誤,我想編寫一個觸發器,在修復錯誤後更新計算的值。有沒有辦法做到這一點?在同一個表上更新後的MySQL觸發器
回答
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$$
謝謝你,下面你的例子,我做錯了什麼?它抱怨語法錯誤! '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
我的例子是缺少'THEN'關鍵字。而'$$'是一個樣本分隔符,您需要一個匹配的(前面的)'DELIMITER $$'語句。而且您可能需要考慮觸發器命名約定,該約定包含觸發器名稱中表的名稱。 (這不是MySQL的要求,但它可以在大型模式中使用,包含大量表格和大量觸發器。)另一個需要考慮的事情是,是否確實需要存儲派生列。該值可以通過在查詢的SELECT列表中包含相關表達式來返回。 – spencer7593 2013-03-14 17:50:57
非常感謝,工作! – UNagaswamy 2013-03-14 19:49:05
- 1. 在同一個表上插入觸發器後更新
- 2. 更新的同一張表上的MySQL觸發器
- 3. 更新觸發器上的Mysql更新
- 4. MySQL使用前觸發器更新同一個表
- 5. 在一個表上寫入觸發器1更新表2和觸發器在表2上更新表格1
- 6. MySQL更新觸發器在同一張桌上
- 7. 同一個表的兩個不同的更新觸發器
- 8. MySQL的:寫觸發表列和更新相同,另一個表
- 9. 在更新MySQL後觸發SOLR更新
- 10. 更新觸發器需要在同一個表和字段上進行更新
- 11. MySQL中,在表2中插入表1 INSERT觸發器之後INSRT觸發後有一個更新表1
- 12. 如何在MySQL表中更新後觸發一個動作?
- 13. SQL Server後更新觸發器更新另一個表
- 14. 創建觸發器更新後更新另一個表
- 15. 更新另一張表後觸發器更新一張表
- 16. MySQL觸發器根據另一個表上的更改更新表格
- 17. 插入觸發器更新值後的mysql觸發器
- 18. 更新觸發器上的MySql。 DELIMITER
- 19. 更新一個在觸發器列在SQL Server中的同一個表只更新特定的列後,2008年
- 20. MySql觸發器,在插入時更新另一個表格
- 21. MySQL觸發器 - 更新後刪除
- 22. MYSQL後觸發器更新如果
- 23. 觸發到插入後更新表中的不同的一個
- 24. MySQL觸發後插入和更新表
- 25. Cassandra觸發器在更新另一個表時更新表格
- 26. 觸發器更新另一個表
- 27. 觸發器更新另一個表
- 28. SQL觸發器更新另一個表
- 29. Oracle觸發器更新列在同一個表
- 30. 在同一個表中更新/插入觸發器
TRIGGER AFTER UPDATE? – 2013-03-14 16:16:13
添加BEFORE或AFTER UPDATE觸發器。 – Tom 2013-03-14 16:17:37