我一直聽說有關觸發器,我有幾個問題。
什麼是觸發器?
我該如何設置它們?
除了典型的SQL內容之外,還有什麼需要注意的地方嗎?設置MySQL觸發器
10
A
回答
15
觸發器允許您在某些事件發生時執行數據庫中的函數(例如,插入到表中)。
我無法對mysql進行具體評論。
注意事項:觸發器可以非常誘人,當你第一次使用它們時,它們看起來像是各種問題的靈丹妙藥。但是,他們會發生「魔術」的事情,如果你不知道數據庫裏面的事情,看起來真的很奇怪(例如插入其他表格,輸入數據改變等)。在實現事件作爲觸發器之前,我會認真考慮在模式周圍強制使用API(最好在數據庫中,但在外部如果不行)。
有些事情我還是使用觸發器的
- 「DATE_CREATED」和「date_last_edited」領域
- 保持跟蹤插入「ID」的(在Oracle中,那裏沒有汽車id字段)
- 飼養改變歷史
事情你不想使用觸發器,
-
條
- 業務規則/邏輯
- 任何它連接的數據庫之外(例如Web服務調用)
- 訪問控制
- 任何這不是事務性的(什麼,你在做觸發必須能夠與回滾交易)
0
觸發器是一個指定的數據庫對象,它與一個表關聯,並在表發生特定事件時被激活。
創建觸發器:
CREATE TRIGGER triggerName [BEFORE|AFTER] [INSERT|UPDATE|DELETE|REPLACE] ON tableName FOR EACH ROW SET stuffToDoHERE;
即使我回答了這個部分的另一個問題仍然有效。
1
從dev.mysql.com,觸發器是
...指定的數據庫對象,它是一個與表有關 那就是 激活當特定事件 爲表發生。
創建它們的語法is also documented at that site。
簡而言之,
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
,他們提供了一個例子:
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
你至少需要通過all the restrictions on stored functions遵守。 您將無法鎖定表格,更改視圖或修改觸發觸發器的表格。也觸發may cause replication problems。
0
這個問題是舊的,其他的答案都非常好,但由於用戶被問及應採取預防措施,我想補充一點:
- 如果在複雜環境中使用複製,請不要大量使用觸發器,也不要從觸發器中調用存儲過程。
- 觸發器在MySQL中很慢。
- 您不能在觸發器中使用某些SQL語句。有些陳述是允許的,但應該避免,如LOCK。一般規則是:如果你不完全理解你在做什麼的含義,你不應該這樣做。
- 觸發器會導致無限循環,所以要小心。
相關問題
- 1. 如何設置mysql多觸發器
- 2. MySQL的:如何設置觸發器
- 3. MySQL觸發器+設置變量
- 4. MYSQL - 觸發器
- 5. 設置觸發
- 6. mysql觸發器到oracle觸發器
- 7. MySQL + delete觸發器
- 8. MySQL DML觸發器
- 9. 更新前的MySQL觸發器 - 從字符串中設置dateformat
- 10. MYSQL觸發器獲取最後一行值並設置
- 11. MYSQL觸發器設置日期時間值使用case語句
- 12. 如何設置MySQL觸發器來更新其他表格列?
- 13. 如何在mysql中設置動態值的觸發器?
- 14. MySql觸發器沒有觸發(完全)
- 15. MySQL觸發器沒有觸發AFTER INSERT
- 16. 帶觸發條件的MySQL觸發器
- 17. MySQL觸發器沒有被觸發?
- 18. 使用SQL觸發器設置datetime列
- 19. 在事件觸發器中設置VerticalAlignment
- 20. 用觸發器設置BorderBrush的顏色
- 21. 設置規則/觸發器在集會
- 22. 使用觸發器設置可見性
- 23. 設置定時觸發器的時區
- 24. WPF DataGrid:在觸發器中設置ColumnWidth
- 25. WPF - 爲觸發器的setter設置DataContext
- 26. 在觸發器上設置Wpf AlternatingRowBackground
- 27. Silverlight - 如何設置觸發器彈出
- 28. UpdatePanel觸發器,如何設置__doPostBack的觸發事件?
- 29. Mysql觸發器:檢查值實際上是在插入觸發器之前設置的
- 30. mysql約束或觸發器