查询是否存在MYSQL表上的触发器

14

是否有一种查询方式可以列出特定表上创建的所有触发器?

比如说,我有一个名为client的表,我想列出在该表上创建的所有触发器(例如,插入/更新/删除等)。

任何形式的帮助都将不胜感激。

2个回答

32

SHOW TRIGGERS

SHOW TRIGGERS LIKE '<tablename>'

e.g.

SHOW TRIGGERS LIKE 'client'

触发器的名称中是否必须包含表名? - Sashi Kant
1
不是的,就你而言并不需要关心这个问题... MySQL内部会处理。我提供的手册页面示例中触发器名称(ins_sum)与表名称(account)完全不同。 - Mark Baker
+1和接受,我明白这个问题太基础了,但是我对触发器一无所知... 再次感谢..:-) - Sashi Kant
1
确保一件事(对我来说真的很令人沮丧),就是您正在具有足够特权的权限下运行。我只使用一个拥有最低权限的用户在我感兴趣的模式上运行,并且感到困惑,因为似乎该模式根本没有触发器。以root身份运行相同的查询,突然间所有我的触发器又都可见了! - Itai

10
接受的答案是正确和最直接的方法,但为了更好地查看表上的触发器并更好地控制返回内容,请使用INFORMATION_SCHEMA:
select * from INFORMATION_SCHEMA.TRIGGERS where EVENT_OBJECT_TABLE='client';
使用此方法,您可以过滤诸如EVENT_OBJECT_TABLE(表名)、TRIGGER_SCHEMA、EVENT_MANIPULATION(插入、更新、删除等)以及其他属性。
如上面的评论中指出的那样,您还需要具有TRIGGER权限才能使用这种方法。

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