The SQLite CREATE TRIGGER
command is used to create and add triggers to the SQLite database
.
Triggers
are database operations that run automatically when a specified database event occurs.
The trigger will be executed when an INSERT, UPDATE, or DELETE operation is performed on a table.
The syntax to create a SQLite trigger is as follows:
CREATE TRIGGER syntax
CREATE [ TEMP | TEMPORARY ] TRIGGER [ IF NOT EXISTS ] [ SCHEMA_NAME ].trigger_name [ BEFORE | AFTER | INSTEAD OF ] [ INSERT | UPDATE | DELETE ] [ FOR EACH ROW ] ON table_name [WHEN condition] BEGIN SQL statements; END;
- The syntax to create a trigger starts with the command
CREATE TRIGGER
followed by the name of the trigger trigger_name. BEFORE
andAFTER
specifies whether the trigger will be executed before or after the SQL statement is executed.INSTEAD OF
triggers work only on views.INSERT
,UPDATE
,DELETE
specifies the type of SQL statement that will execute the trigger.ON
table_name is the name of the table on which the trigger will be executed.FOR EACH ROW
specifies that the trigger will be executed for each row that is inserted, updated, or deleted.
Examples
CREATE TRIGGER IF NOT EXISTS customers_log_ins BEFORE INSERT ON customers FOR EACH ROW BEGIN INSERT INTO customers_log(id,name,city,has_orders,log_date,log_message) VALUES (NEW.id,NEW.name,NEW.city,NEW.has_orders,DATETIME(),'insert'); END; INSERT INTO customers (id, name, city, has_orders) VALUES (9, 'Amelia', 'Denver', NULL); SELECT * FROM customers_log;
Trigger actions can access column values of the row being inserted, deleted, or updated using references of the form “NEW.column_name” and “OLD.column_name”. Column_name is the name of a column in the table to which the trigger is associated. OLD
and NEW
references can only be used in event triggers as follows:
- NEW is used in INSERT and UPDATE.
- OLD is used in UPDATE AND DELETE.
CREATE TRIGGER customers_log_upd AFTER UPDATE ON customers WHEN OLD.name <> NEW.name OR OLD.city <> NEW.city BEGIN INSERT INTO customers_log(id,name,city,has_orders,log_date,log_message) VALUES (OLD.id,NEW.name,NEW.city,OLD.has_orders,DATETIME(),'update'); END; UPDATE customers SET name='Mia', city='Boston' WHERE id=9; SELECT * FROM customers_log;