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

5
我遇到了一个有趣的问题。我想创建两个触发器,其中trigger1将在DROP TABLE时触发,而trigger2将在ALTER TABLE时触发。我希望如果任何表被删除或更改,则会触发trigger1和trigger2,但是,不幸的是我不知道如何编写此类触发器的语法,也找不到这样的触发器的语法。在MySQL中,我只能编写在INSERT、UPDATE或DELETE之前/之后触发的触发器,但现在我想编写适用于数据库级别且可在表事件上触发的触发器。有人可以帮我吗?

@Mythje:那是针对SQL Server的。他问的是关于MySql的。 - juergen d
3个回答

12
你所需要的称为 "DDL触发器"。MySQL不支持它们。
有这个SourceForge请求,但我不确定有关添加它的人是否认真。

+1 很棒的回答!不过,我希望你是错的,他们应该有解决方案。我会等待其他答案,并继续研究,如果我找到了解决方案,我会自己回答我的问题。如果没有,我可能会接受你的答案。谢谢。 - Lajos Arpad
1
你的链接今天指向了空白页面,但我找到了这个工作日志条目,希望能有所帮助 :-) - watery
@watery 上面的链接是针对 Oracle 或 SQL Server 而不是 MySQL 的,语法在 MySQL 中无法正常工作。 - vimmi

1

无法使用触发器来执行删除语句。根据文档,触发器在以下情况下被激活:

  • INSERT:每当向表中插入新行时,例如通过 INSERT、LOAD DATA 和 REPLACE 语句时,触发器会被激活。

    UPDATE:每当修改行时,例如通过 UPDATE 语句时,触发器会被激活。

    DELETE:每当从表中删除行时,例如通过 DELETE 和 REPLACE 语句时,触发器会被激活。但是,对表执行的 DROP TABLE 和 TRUNCATE TABLE 语句不会激活此触发器,因为它们不使用 DELETE

虽然没有提到 ALTER TABLE,但我只期望 DML 语句能够触发触发器。


+1 我已经阅读了文档,但没有找到我需要的内容,但是您的答案可能对其他没有阅读文档的SO用户有用。 - Lajos Arpad
在使用InnoDB时,TRUNCATE TABLE语句将始终在MySQL 5.0.3之前使用DELETE,在之后使用DELETE时存在约束条件。 - Steve Buzonas

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

测试一下


这是一个过程,而不是触发器。此外,我的问题涉及两个触发器,分别在修改和删除命令上运行。 - Lajos Arpad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接