2011-12-28 200 views
4

我遇到了一個有趣的問題。我想創建兩個觸發器,trigger1將在DROP TABLE上觸發,並在ALTER TABLE上觸發trigger2。我想讓trigger1和trigger2在任何表被刪除或更改時觸發,但不幸的是,我不知道這樣做的語法,也找不到這種觸發器的語法。在MySQL中,我只能編寫在INSERT,UPDATEDELETE之前/之後觸發的觸發器,但現在我想編寫觸發器,這些觸發器適用於數據庫級別並將觸發表事件。有人能幫助我嗎?MySQL觸發器在更改或刪除時觸發

+0

@Mythje:爲SQL服務器。他問了一下MySql – 2011-12-28 15:02:05

回答

8

你在找什麼叫做「DDL觸發器」。 MySQL不支持他們

有這個SourceForge request,但我不知道任何人有多麼嚴重有關添加它

+0

+1優秀的答案!但是,我希望你不對,他們有這個解決方案。我會等待其他答案,並將繼續研究,如果我找到解決方案,我會自己回答我的問題。如果不是,我可能會接受你的。謝謝。 – 2011-12-28 15:38:13

+0

您的鏈接今天沒有任何內容,但是我發現[此Worklog條目](https://dev.mysql.com/worklog/task/?id=2418);希望它有幫助:-) – watery 2015-09-29 09:37:25

1

這是不可能使用一個觸發下降statements.According到documentation觸發器是在激活

  • INSERT:每當一個新行被插入到表中的觸發器被激活;例如,通過INSERT,LOAD DATA和REPLACE 聲明。

    UPDATE:每當行被修改時觸發器被激活;例如,通過UPDATE語句。

    DELETE:無論何時從表中刪除行,都會激活觸發器;例如,通過DELETE和REPLACE語句。 但是,表中的DROP TABLE和TRUNCATE TABLE語句不激活此觸發器,因爲它們不使用DELETE

它沒有對alter table做任何說明,但我希望只有DML語句能夠觸發一個觸發器。

+0

+1我讀過文檔,並沒有找到我正在尋找的內容,但是您的答案可能對沒有閱讀文檔的其他SO用戶有用。 – 2011-12-28 15:20:41

+0

使用InnoDB時,TRUNCATE TABLE語句將始終在5.0.3之前的MySQL上使用DELETE,並且在有約束時使用DELETE。 – 2014-10-18 17:57:41

0
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 

測試這個

+0

這是一個程序,而不是觸發器。另外,我的問題涉及兩個觸發器,它們將分別在alter和drop命令上運行。 – 2013-04-17 20:17:00