PowerPoint 2007

Download Report

Transcript PowerPoint 2007

INLS 623– TRIGGERS
Instructor: Jason Carter
FINAL EXAM
Classes end on Dec. 2nd
 Exam Days start on December 4th
 Final Exam is on December 10 at 4pm



Take home will be available December 7th on Piazza
Turn in Exam on December 10 at 4pm in this room

For those who can’t make it, turn in exam before
December 10 at 4pm
TRIGGERS
A set of SQL statements stored in the database
catalog
 A SQL trigger is executed or fired whenever an
event associated with a table occurs e.g., insert,
update or delete
 A SQL trigger is a special type of stored procedure

TRIGGERS VS STORED PROCEDURES

A stored procedure is called explicitly
 CALL GetAllProducts()
A trigger is called implicitly and automatically
 When a data modification event is made against a
table

WHY TRIGGERS?

Provide an alternative way to check the integrity of
data



Uniqueness check: SQL query to check if value exists, if
value doesn’t exist, insert value
Are very useful to audit the changes of data in tables
Store business rules in the database
DISADVANTAGES OF TRIGGERS

May increase performance (overhead) of the database
server
The trigger is being run in addition to the original SQL
query and could take a large amount of time to execute


Difficult to debug


Triggers are invoked and executed invisibly from clientapplications therefore it is difficult to figure out what
happen in the database layer
Programmers don’t have full control
Programmers don’t have access to the database
 Business rules are stored in database and hidden from
application

TRIGGERS
•
A trigger is a set of SQL statements that is
invoked automatically when a change is
made to the data on the associated table
• A trigger can be defined to be invoked either
before or after the data is changed by
INSERT, UPDATE, or DELETE statement
• If you use any other statement than INSERT,
UPDATE, or DELETE, the trigger is not
invoked (For example TRUNCATE)
WHEN A TRIGGER CAN BE INVOKED
BEFORE INSERT – activated before data is inserted
into the table.
 AFTER INSERT – activated after data is inserted
into the table.
 BEFORE UPDATE – activated before data in the
table is updated.
 AFTER UPDATE – activated after data in the table
is updated.
 BEFORE DELETE – activated before data is
removed from the table.
 AFTER DELETE – activated after data is removed
from the table.

NAMING A TRIGGER
Triggers names for a table must be unique
 Can have the same trigger name defined for
different tables
 Naming conventions

order_before_update
A trigger invoked before a row in the order table is
updated
CREATE TRIGGERS
DELIMITER $$
CREATE TRIGGER trigger_name trigger_time
trigger_event
ON table_name
FOR EACH ROW
BEGIN
...
END$$
DELIMITER;
CREATE TRIGGERS (CONTINUED)

Create a trigger to log changes in the employees
table
Need to create a table to store
the changes before an
update is made to employees
CREATE TABLE employees_audit (
id INT AUTO_INCREMENT PRIMARY KEY,
employeeNumber INT NOT NULL,
lastname VARCHAR(50) NOT NULL,
changedat DATETIME DEFAULT NULL,
action VARCHAR(50) DEFAULT NULL
);
WHAT SHOULD WE NAME THE TRIGGER?
Need to create a table to store the changes before an
update is made to employees table
Tablename = employee
Before or After = Before
Insert OR UPDATE OR DELETE = UPDATE
employee_before_update
CREATE TRIGGERS
DELIMITER $$
CREATE TRIGGER employee_before_update
trigger_time trigger_event
ON table_name
FOR EACH ROW
BEGIN
...
END$$
DELIMITER;
WHAT IS THE TRIGGER TIME AND EVENT?

Need to create a table to store the changes before
an update is made to employees table
BEFORE INSERT
 AFTER INSERT
 BEFORE UPDATE
 AFTER UPDATE
 BEFORE DELETE
 AFTER DELETE

BEFORE UPDATE
CREATE TRIGGERS
DELIMITER $$
CREATE TRIGGER employee_before_update
BEFORE_UPDATE ON employees
FOR EACH ROW
BEGIN
...
END$$
DELIMITER;
What SQL should go here?
SQL IN TRIGGER BODY


Goal is to store the changes before an update is made
to employees table in the employees_audit table
Employees_Audit
employeeNumber
 lastname
 changedat (date change was made)
 action (what action was taken on the employees table)

INSERT INTO employees_audit
SET action = 'update',
employeeNumber = OLD.employeeNumber,
lastname = OLD.lastname,
changedat = NOW();
WHAT DOES THE “OLD” KEYWORD MEAN?


OLD keyword to access employeeNumber and
lastname column of the row affected by the trigger
INSERT TRIGGER


DELETE Trigger


You can use NEW keyword only. You cannot use the
OLD keyword.
There is no new row so you can use the OLD keyword
only.
UPDATE Trigger

OLD refers to the row before it is updated and NEW
refers to the row after it is updated.
CREATE TRIGGERS
DELIMITER $$
CREATE TRIGGER employee_before_update
BEFORE_UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employees_audit
SET action = 'update',
employeeNumber = OLD.employeeNumber,
lastname = OLD.lastname,
changedat = NOW();
END$$
DELIMITER;
TEST TRIGGER

Update the employees table to check whether the
trigger is invoked
UPDATE employees
SET
lastName = ‘Phan'
WHERE
employeeNumber = 1056;
TEST TRIGGER

Check if the trigger was invoked by the UPDATE
statement
SELECT * FROM employees_audit;