What is the command to list all triggers in a MySQL database?
8 Answers
The command for listing all triggers is:
show triggers;
or you can access the INFORMATION_SCHEMA table directly by:
select trigger_schema, trigger_name, action_statement
from information_schema.triggers
- You can do this from version 5.0.10 onwards.
- More information about the
TRIGGERStable is here.
3 Comments
SHOW TRIGGERS requires that you have the TRIGGER privilege for that database and table. If you login to MySQL with an unprivileged user, executing SHOW TRIGGERS will return nothing instead of throwing an error. That can be confusing if you aren't aware of the privilege requirement.I hope following code will give you more information.
select * from information_schema.triggers where
information_schema.triggers.trigger_schema like '%your_db_name%'
This will give you total 22 Columns in MySQL version: 5.5.27 and Above
TRIGGER_CATALOG
TRIGGER_SCHEMA
TRIGGER_NAME
EVENT_MANIPULATION
EVENT_OBJECT_CATALOG
EVENT_OBJECT_SCHEMA
EVENT_OBJECT_TABLE
ACTION_ORDER
ACTION_CONDITION
ACTION_STATEMENT
ACTION_ORIENTATION
ACTION_TIMING
ACTION_REFERENCE_OLD_TABLE
ACTION_REFERENCE_NEW_TABLE
ACTION_REFERENCE_OLD_ROW
ACTION_REFERENCE_NEW_ROW
CREATED
SQL_MODE
DEFINER
CHARACTER_SET_CLIENT
COLLATION_CONNECTION
DATABASE_COLLATION
1 Comment
LIKE when dealing with schema. I've worked in environments where doing it that way would be error prone where a client had a database named "company" and another named "company_project". I'd also suggest capitalising KEYWORDS for clarity and INFORMATION_SCHEMA and the columns there so it's clear you're not dealing with a regular DB.This sentence could contribute to solving the problem:
select LOWER(concat('delimiter |', '\n', 'create trigger %data_base_name%.', TRIGGER_NAME, '\n',
' ', ACTION_TIMING, ' ', EVENT_MANIPULATION, ' on %data_base_name%.', EVENT_OBJECT_TABLE, ' for each row', '\n',
ACTION_STATEMENT, '\n',
'|')) AS TablaTriggers from information_schema.triggers where
information_schema.triggers.trigger_schema like '%data_base_name%'
Comments
You can show all triggers with the SQL below. *The doc explains INFORMATION_SCHEMA.TRIGGERS table and I recommend to use \G which can show them more clearly and the SQL below can show more details than SHOW TRIGGERS which I explain last:
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS;
Or:
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS\G
And, you can show the triggers of apple database with the SQL below:
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA = 'apple';
And, you can show the triggers of apple database selecting apple database with USE. *The doc explains SHOW TRIGGERS and I recommend to use \G which can show them more clearly:
USE apple;
SHOW TRIGGERS;
Or:
USE apple;
SHOW TRIGGERS\G
Or:
USE apple;
SHOW TRIGGERS FROM apple;
Or:
USE apple;
SHOW TRIGGERS FROM apple\G
And, you can show the triggers of orange database even if selecting apple database with USE:
USE apple;
SHOW TRIGGERS FROM orange;
And, you can show the triggers of apple database not selecting any one of databases with USE:
SHOW TRIGGERS FROM apple;
Be careful, if you run the SQL below not selecting any one of databases with USE:
SHOW TRIGGERS;
Then, there is the error below:
ERROR 1046 (3D000): No database selected