--- title: Create a Trigger sidebarTitle: Create a Trigger --- ## Description Triggers enable users to define event-based actions. For example, if a table is updated, then run a query to update predictions. Currently, you can create triggers on the following data sources: - [MongoDB](/integrations/data-integrations/mongodb) (available for MongoDB Atlas Database), - [Slack](/integrations/app-integrations/slack), - [Solace](https://github.com/mindsdb/mindsdb/tree/main/mindsdb/integrations/handlers/solace_handler), - [PostgreSQL](/integrations/data-integrations/postgresql) (requires write access). ## Syntax Here is the syntax for creating a trigger: ```sql CREATE TRIGGER trigger_name ON integration_name.table_name [COLUMNS column_name1, column_name2, ...] ( sql_code ) ``` By creating a trigger on a data source, every time this data source is updated or new data is inserted, the `sql_code` provided in the statement will be executed. You can create a trigger either on a table... ```sql CREATE TRIGGER trigger_name ON integration_name.table_name ( sql_code ) ``` ...or on one or more columns of a table. ```sql CREATE TRIGGER trigger_name ON integration_name.table_name COLUMNS column_name1, column_name2 ( sql_code ) ``` Here is how to list all triggers: ```sql SHOW TRIGGERS; ``` ## Example Firstly, connect Slack to MindsDB following [this instruction](/integrations/app-integrations/slack#set-up-a-slack-app-and-generate-tokens) and connect the Slack app to a channel. ```sql CREATE DATABASE mindsdb_slack WITH ENGINE = 'slack', PARAMETERS = { "token": "xoxb-...", "app_token": "xapp-..." }; ``` Create a model that will be used to answer chat questions every time new messages arrive. Here we use the [OpenAI engine](/integrations/ai-engines/openai), but you can use any [other LLM](/integrations/ai-overview#large-language-models). ```sql CREATE MODEL chatbot_model PREDICT answer USING engine = 'openai_engine', prompt_template = 'answer the question: {{text}}'; ``` Here is how to generate answers to Slack messages using the model: ```sql SELECT s.text AS question, m.answer FROM chatbot_model m JOIN mindsdb_slack.messages s WHERE s.channel_id = 'slack-bot-channel-id' AND s.user != 'U07J30KPAUF' AND s.created_at > LAST; ``` Let's analyze this query: - We select the question from the Slack connection and the answer generated by the model. - We join the model with the `messages` table. - In the `WHERE` clause: - We provide the channel name where the app/bot is integrated. - We exclude the messages sent by the app/bot. You can find the user ID of the app/bot by querying the `mindsdb_slack.users` table. - We use the `LAST` keyword to ensure that the model generates answers only to the newly sent messages. Finally, create a trigger that will insert an answer generated by the model every time when new messages are sent to the channel. ```sql CREATE TRIGGER slack_trigger ON mindsdb_slack.messages ( INSERT INTO mindsdb_slack.messages (channel_id, text) SELECT 'slack-bot-channel-id' AS channel_id, answer AS text FROM chatbot_model m JOIN TABLE_DELTA s WHERE s.user != 'slack-bot-id' # this is to prevent the bot from replying to its own messages AND s.channel_id = 'slack-bot-channel-id' ); ``` Let's analyze this statement: - We create a trigger named `slack_trigger`. - The trigger is created on the `mindsdb_slack.messages` table. Therefore, every time when data is added or updated, the trigger will execute its code. - We provide the code to be executed by the trigger every time the triggering event takes place. - We insert an answer generated by the model into the `messages` table. - The `TABLE_DELTA` stands for the table on which the trigger has been created. - We exclude the messages sent by the app/bot. You can find the user ID of the app/bot by querying the `mindsdb_slack.users` table.