我遇到了一個有趣的問題。我想創建兩個觸發器,trigger1將在DROP TABLE
上觸發,並在ALTER TABLE
上觸發trigger2。我想讓trigger1和trigger2在任何表被刪除或更改時觸發,但不幸的是,我不知道這樣做的語法,也找不到這種觸發器的語法。在MySQL中,我只能編寫在INSERT
,UPDATE
或DELETE
之前/之後觸發的觸發器,但現在我想編寫觸發器,這些觸發器適用於數據庫級別並將觸發表事件。有人能幫助我嗎?MySQL觸發器在更改或刪除時觸發
回答
你在找什麼叫做「DDL觸發器」。 MySQL不支持他們
有這個SourceForge request,但我不知道任何人有多麼嚴重有關添加它
+1優秀的答案!但是,我希望你不對,他們有這個解決方案。我會等待其他答案,並將繼續研究,如果我找到解決方案,我會自己回答我的問題。如果不是,我可能會接受你的。謝謝。 – 2011-12-28 15:38:13
您的鏈接今天沒有任何內容,但是我發現[此Worklog條目](https://dev.mysql.com/worklog/task/?id=2418);希望它有幫助:-) – watery 2015-09-29 09:37:25
這是不可能使用一個觸發下降statements.According到documentation觸發器是在激活
INSERT:每當一個新行被插入到表中的觸發器被激活;例如,通過INSERT,LOAD DATA和REPLACE 聲明。
UPDATE:每當行被修改時觸發器被激活;例如,通過UPDATE語句。
DELETE:無論何時從表中刪除行,都會激活觸發器;例如,通過DELETE和REPLACE語句。 但是,表中的DROP TABLE和TRUNCATE TABLE語句不激活此觸發器,因爲它們不使用DELETE。
它沒有對alter table做任何說明,但我希望只有DML語句能夠觸發一個觸發器。
+1我讀過文檔,並沒有找到我正在尋找的內容,但是您的答案可能對沒有閱讀文檔的其他SO用戶有用。 – 2011-12-28 15:20:41
使用InnoDB時,TRUNCATE TABLE語句將始終在5.0.3之前的MySQL上使用DELETE,並且在有約束時使用DELETE。 – 2014-10-18 17:57:41
PROCEDURE `pr_new_type`(IN column_name varchar(10))
BEGIN
SET @queryText = CONCAT('ALTER TABLE `user_rights` ADD ', column_name, ' BINARY(9) NULL');
PREPARE query FROM @queryText;
EXECUTE query;
DEALLOCATE PREPARE query;
END
測試這個
這是一個程序,而不是觸發器。另外,我的問題涉及兩個觸發器,它們將分別在alter和drop命令上運行。 – 2013-04-17 20:17:00
- 1. 觸發更新或刪除mysql的
- 2. SQL - 修改或刪除觸發器
- 3. MySQL觸發器 - 更新後刪除
- 4. 更新或刪除SQL觸發器
- 5. MySQL觸發器更改
- 6. 刪除觸發器
- 7. 在更新/刪除/插入時使用Mysql觸發器
- 8. MySQL觸發問題:只有在列更改時觸發?
- 9. MySQL的觸發刪除
- 10. 在-更新和-刪除觸發器
- 11. MySql觸發更新,插入和刪除
- 12. 在MySQL觸發器更改值與PHP?
- 13. Mysql觸發器來選擇和刪除
- 14. 刪除後刪除觸發器只會觸發嗎?
- 15. 刪除一行會導致更新觸發器觸發嗎?
- 16. SQL - 刪除更新觸發
- 17. 從INSERT觸發器更新時觸發更新後未觸發
- 18. 當0行受到影響時觸發刪除觸發器
- 19. 無法刪除觸發器
- 20. 創建刪除觸發器
- 21. 刪除觸發器SQL 2005
- 22. 更新和刪除Oracle觸發器
- 23. 插入,更新,刪除的觸發器
- 24. 刪除觸發條件時
- 25. Laravel Observer或MySQL觸發器?
- 26. mysql的觸發器:跟蹤更改
- 27. 在mysql中刪除動作和更新觸發器
- 28. MySQL觸發器:在table1更新後,從table2刪除行?
- 29. 觸發器或更改通知
- 30. mysql觸發器到oracle觸發器
@Mythje:爲SQL服務器。他問了一下MySql – 2011-12-28 15:02:05