SQL Certification - SPLessons

SQL Certification Triggers

Home > Lesson > Chapter 31
SPLessons 5 Steps, 3 Clicks
5 Steps - 3 Clicks

SQL Certification Triggers

Triggers

shape Description

A trigger is a SQL program, which can be executed automatically by the Oracle server when an event is raised. SQL Triggers executes before or after an insert, update or delete statement. SQL Triggers are fired, when a appropriate event occurs for the table. SQL Triggers are used to perform verification checks on data values for insertion and perform calculations.SQL Triggers are of 4 types:

Before Insert trigger

shape Description

SQL Before insert trigger will fire the trigger before performing insert records values inside the table.

shape Syntax

create trigger <trigger_name> before insert on <table_name> for each row BEGIN -- variable declarations -- trigger code END;
trigger_name => The name of the trigger to be created. table_name => The accurate table in the database.

shape Examples

By viewing the below example, the concept of before insert trigger can be easily understood. [sql]sql> select * from employee01; +--------+----------+-----------+-------------------+--------+-------+ | emp_id | emp_name | city | designation | salary | perks | +--------+----------+-----------+-------------------+--------+-------+ | 1 | david | delhi | manager | 12000 | 855 | | 2 | shaha | mumbai | assistant manager | 13000 | 853 | | 3 | sha | puna | scales manager | 11000 | 850 | | 4 | jack | bangalore | designer | 14000 | 854 | | 5 | james | mangalore | web designer | 15000 | 1124 | +--------+----------+-----------+-------------------+--------+-------+ 5 rows in set (0.00 sec) sql delimiter $$ sql CREATE TRIGGER inst_trigger BEFORE INSERT ON Employee01 -> FOR EACH ROW -> BEGIN -> UPDATE Employee01 SET Salary=Salary-400 where perks>500; -> end; -> $$ Query OK, 0 rows affected (0.42 sec) sql> delimiter ; sql> insert into employee01 values(6,'mike','chennai','develpoer',15500,840); Query OK, 1 row affected (0.10 sec) sql> select * from employee01; +--------+----------+-----------+-------------------+--------+-------+ | emp_id | emp_name | city | designation | salary | perks | +--------+----------+-----------+-------------------+--------+-------+ | 1 | david | delhi | manager | 11600 | 855 | | 2 | shaha | mumbai | assistant manager | 12600 | 853 | | 3 | sha | puna | scales manager | 10600 | 850 | | 4 | jack | bangalore | designer | 13600 | 854 | | 5 | james | mangalore | web designer | 14600 | 1124 | | 6 | mike | chennai | develpoer | 15100 | 840 | +--------+----------+-----------+-------------------+--------+-------+ 6 rows in set (0.00 sec) [/sql] In the above example, before insert, trigger will fire the condition before inserting a record inside the table or on the table, and update command is performed on the column salary(Set Salary=Salary-400 where perks>500). Then the salary of all the employee changes as all the employee perks are greater then the applied condition.

Before update trigger

shape Description

SQL Before update trigger will fired the trigger before performing update records values inside the table.

shape Syntax

create trigger <trigger_name> before update on <table_name> for each row BEGIN — variable declarations — trigger code END;
trigger_name => The name of the trigger to be create. table_name => The accurate table in the database.

shape Examples

By viewing the below example, the concept of before update trigger can be easily understood. [sql]sql> select * from employee01; +--------+----------+-----------+-------------------+--------+-------+ | emp_id | emp_name | city | designation | salary | perks | +--------+----------+-----------+-------------------+--------+-------+ | 1 | david | delhi | manager | 12000 | 855 | | 2 | shaha | mumbai | assistant manager | 13000 | 853 | | 3 | sha | puna | scales manager | 11000 | 850 | | 4 | jack | bangalore | designer | 14000 | 854 | | 5 | james | mangalore | web designer | 15000 | 1124 | | 6 | mike | chennai | develpoer | 15500 | 840 | +--------+----------+-----------+-------------------+--------+-------+ 6 rows in set (0.00 sec) sql> delimiter // sql> CREATE TRIGGER updtrigger BEFORE UPDATE ON Employee01 -> FOR EACH ROW -> BEGIN -> IF NEW.Salary=500 THEN -&gt; SET NEW.Salary=10000; -> ELSEIF NEW.Salary>500 THEN -> SET NEW.Salary=15000; -> END IF; -> END -> // Query OK, 0 rows affected (0.01 sec) sql> delimiter ; sql> UPDATE Employee01 -> SET Salary=500; Query OK, 5 rows affected (0.04 sec) Rows matched: 7 Changed: 5 Warnings: 0 sql> select * from employee01; +--------+----------+-----------+-------------------+--------+-------+ | emp_id | emp_name | city | designation | salary | perks | +--------+----------+-----------+-------------------+--------+-------+ | 1 | david | delhi | manager | 10000 | 855 | | 2 | shaha | mumbai | assistant manager | 10000 | 853 | | 3 | sha | puna | scales manager | 10000 | 850 | | 4 | jack | bangalore | designer | 10000 | 854 | | 5 | james | mangalore | web designer | 10000 | 1124 | | 6 | mike | chennai | develpoer | 10500 | 840 | +--------+----------+-----------+-------------------+--------+-------+ 6 rows in set (0.00 sec)[/sql] In the above example, before update, SQL Triggers will fire the condition before updating a record inside the table or on the table, and update command is performed on the column salary(update if Salary=Salary>11000 and perks>500 then change to 10000). Then the salary of all the employee changes, as all the employee perks are greater then the applied condition.

After insert trigger

shape Description

SQL After Insert trigger will fire the trigger after performing insert records values inside the table.

shape Syntax

create trigger <trigger_name> AFTER INSERT ON <table_name> FOR EACH ROW BEGIN -- variable declarations -- trigger code END;
trigger_name =>The name of the trigger to be create. table_name => The accurate table in the database.

shape Examples

By viewing the below example, the concept of after insert trigger can be easily understood. [sql]sql create table student_table(stu_id int,stu_name varchar(255),stu_class int ); Query OK, 0 rows affected (0.38 sec) sql create table student_log1(user_id varchar(255),description varchar(255)); Query OK, 0 rows affected (0.48 sec) sql CREATE TRIGGER student_insert AFTER insert ON student_table FOR EACH ROW BEGIN INSERT into student_log1(user_id,description) VALUES (user(),CONCAT('INSER T student records',new.stu_id,' ',new.stu_name,' ',new.stu_class)); END$$ Query OK, 0 rows affected (0.15 sec) sql>delimiter ; sql>insert into student_table values(1,'mike',10); Query OK, 1 row affected (0.10 sec) sql>insert into student_table values(2,'mad',20); Query OK, 1 row affected (0.11 sec) sql>insert into student_table values(3,'mack',30); Query OK, 1 row affected (0.10 sec) sql>select * from student_log1; +----------------+---------------------------------+ | user_id | description | +----------------+---------------------------------+ | root@localhost | INSERT student records1 mike 10 | | root@localhost | INSERT student records2 mad 20 | | root@localhost | INSERT student records3 mack 30 | +----------------+---------------------------------+ 3 rows in set (0.00 sec)[/sql] In the above example, after insert, trigger will fire the condition after inserting a record inside the table or on the table i.e, after creating student_insert table, it will fire on the student_log1 table and all the values will display on student_log1 table which was inserted in student_table. 

After update trigger

shape Description

SQL After update trigger of SQL Triggers will fire the trigger after performing insert  records values inside the table.

shape Syntax

create trigger <trigger_name> AFTER UPDATE ON <table_name> FOR EACH ROW BEGIN -- variable declarations -- trigger code END;
trigger_name => The name of the trigger to be create. table_name => The accurate table in the database.

shape Examples

By viewing the below example, the concept of after update trigger can be easily understood. [sql]Create Table Student_Table02( Stu_Id int, Stu_Name varchar(255),Stu_Class int); create table stu_log02( user_id VARCHAR(255), description VARCHAR(255)); delimiter $$ sql>CREATE TRIGGER stu_update ->AFTER UPDATE ON stu_table FOR EACH ROW ->BEGIN ->INSERT into stu_log(user_id, description) -> VALUES (user(), CONCAT('Update Student Record ->(',old.stu_id,' ',old.stu_name,' ',old.stu_class, ') to (',new.stu_id,' ',new.stu_name,' ',new.stu_class,')')); ->END$$ sql>delimiter ; sql> select * from student_table02; +--------+----------+-----------+ | stu_id | stu_name | stu_class | +--------+----------+-----------+ | 1 | david | 9 | | 2 | shah | 9 | | 3 | mike | 9 | | 4 | james | 9 | +--------+----------+-----------+ 4 rows in set (0.00 sec) sql> update student_table02 set stu_class=stu_class+1; Query OK, 4 rows affected (0.20 sec) Rows matched: 4 Changed: 4 Warnings: 0 sql> select * from student_table02; +--------+----------+-----------+ | stu_id | stu_name | stu_class | +--------+----------+-----------+ | 1 | david | 10 | | 2 | shah | 10 | | 3 | mike | 10 | | 4 | james | 10 | +--------+----------+-----------+ 4 rows in set (0.00 sec) sql>select * from stu_log02; +----------------+--------------------------------------------------------+ | user_id | description | +----------------+--------------------------------------------------------+ | root@localhost | Update Student Record (1 david 9) to (1 david 10) | | root@localhost | Update Student Record (2 shah 9) to (2 shah 10) | | root@localhost | Update Student Record (3 mike 9) to (3 mike 10) | | root@localhost | Update Student Record (4 james 9) to (4 james 10) | +----------------+--------------------------------------------------------+ [/sql] In the above example, after update, trigger will fire the condition after update a record inside the table or on the table. i.e, after creating student_update table it will fire on the student_log2 table and all the values will display on student_log2 table which was inserted in student_table02.

Summary

shape Key Points

SQL Triggers automatically executes when an event is raised.
  • Before Insert Trigger - Will fire before inserting the values.
  • Before Update Trigger - Will fire before updating the values.
  • After Insert Trigger - Will fire after inserting the values.
  • After Update Trigger - Will fired updating the values.