MySQL触发器在更改或删除时触发

MySQL触发器在更改或删除时触发

问题描述:

我遇到了一个有趣的问题。我想创建两个触发器,trigger1将在DROP TABLE上触发,并在ALTER TABLE上触发trigger2。我想让trigger1和trigger2在任何表被删除或更改时触发,但不幸的是,我不知道这样做的语法,也找不到这种触发器的语法。在MySQL中,我只能编写在INSERT,UPDATEDELETE之前/之后触发的触发器,但现在我想编写触发器,这些触发器适用于数据库级别并将触发表事件。有人能帮助我吗?MySQL触发器在更改或删除时触发

+0

@Mythje:为SQL服务器。他问了一下MySql – 2011-12-28 15:02:05

你在找什么叫做“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

这是不可能使用一个触发下降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

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