24
Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 1 / 22

Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

TriggersLecture 14

Robb T. Koether

Hampden-Sydney College

Wed, Feb 14, 2018

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 1 / 22

Page 2: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

1 Triggers

2 Cascading Triggers

3 Update and Insert Triggers

4 Displaying and Dropping Triggers

5 Examples

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 2 / 22

Page 3: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Outline

1 Triggers

2 Cascading Triggers

3 Update and Insert Triggers

4 Displaying and Dropping Triggers

5 Examples

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 3 / 22

Page 4: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Triggers

TriggersCREATE TRIGGER trigger_nametrigger_time trigger_eventON table_nameFOR EACH ROWtrigger_action

A trigger is an event-action pair.When the trigger_event occurs, the trigger_action istaken.The trigger_time is either BEFORE or AFTER.The trigger_event is INSERT, DELETE, or UPDATE.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 4 / 22

Page 5: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Triggers

The trigger_action is a statement (query) or series ofstatements to be executed.If there is more than one statement, then they must be enclosed ina BEGIN-END block and separated by semicolons.The action is executed once for each tuple that is affected by theevent.

For an insertion, the affected tuples are the inserted tuples.For a deletion, the affected tuples are the deleted tuples.For an update, the affected tuples are the updated tuples.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 5 / 22

Page 6: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Triggers

The keyword OLD refers to a deleted or updated tuple.The keyword NEW refers to an added or updated tuple.For an update event, OLD and NEW will always refer to the sametuple, but before and after the update.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 6 / 22

Page 7: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Triggers

TriggersCREATE TRIGGER fire_empAFTER DELETE ON employeesFOR EACH ROWDELETE FROM dependentsWHERE dependents.ssn = OLD.ssn

For example, when an employee is deleted from employees, allcorresponding tuples must also be deleted from dependents.What about the table works_on?

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 7 / 22

Page 8: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Triggers

TriggersCREATE TRIGGER drop_empAFTER DELETE ON employeesFOR EACH ROWBEGINDELETE FROM dependents WHERE dependents.ssn = OLD.ssn;DELETE FROM works WHERE works.ssn = OLD.ssn;END;

However, the semicolon will prematurely end the CREATEcommand.What to do?

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 8 / 22

Page 9: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Triggers

TriggersDELIMITER #CREATE TRIGGER drop_empAFTER DELETE ON employeesFOR EACH ROWBEGINDELETE FROM dependents WHERE dependents.ssn = OLD.ssn;DELETE FROM works WHERE works.ssn = OLD.ssn;END#DELIMITER ;

To handle that situation, we need to temporarily redefine thedelimiter, which has been the semicolon.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 9 / 22

Page 10: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Outline

1 Triggers

2 Cascading Triggers

3 Update and Insert Triggers

4 Displaying and Dropping Triggers

5 Examples

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 10 / 22

Page 11: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Cascading Triggers

Suppose that we delete a department from the departmentstable.Then all employees in that department should be deleted from theemployees table.But then all dependents of those employees should be deletedfrom the dependents table.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 11 / 22

Page 12: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Cascading Triggers

Therefore, we need two triggers.One trigger will delete all employees from the employees tablewhen the department is deleted from the departments table.The other trigger will delete all dependents of an employee from thedependents table when the employee is deleted from theemployees table.

We see from this example that triggers may cascade.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 12 / 22

Page 13: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Cascading Triggers

Cascading TriggersCREATE TRIGGER drop_deptAFTER DELETE ON departmentsFOR EACH ROWDELETE FROM employeesWHERE employees.dept = OLD.dept;

CREATE TRIGGER drop_empAFTER DELETE ON employeesFOR EACH ROWDELETE FROM dependentsWHERE dependents.ssn = OLD.ssn;

The trigger drop_dept will automatically invoke the triggerdrop_emp.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 13 / 22

Page 14: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Outline

1 Triggers

2 Cascading Triggers

3 Update and Insert Triggers

4 Displaying and Dropping Triggers

5 Examples

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 14 / 22

Page 15: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Update Triggers

Updating a Social Security NumberCREATE TRIGGER update_ssnAFTER UPDATE ON employeeFOR EACH ROWUPDATE dependents SET dependents.ssn = NEW.ssnWHERE dependents.ssn = OLD.ssn;

This trigger will update the dependents’ SSN’s when theemployees’ SSN’s are updated.

Note the use of NEW and OLD.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 15 / 22

Page 16: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Update Triggers

Updating a Social Security NumberCREATE TRIGGER update_ssnAFTER UPDATE ON employeeFOR EACH ROWUPDATE dependents SET dependents.ssn = NEW.ssnWHERE dependents.ssn = OLD.ssn;

This trigger will update the dependents’ SSN’s when theemployees’ SSN’s are updated.Note the use of NEW and OLD.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 15 / 22

Page 17: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Update Triggers

Insert a FriendCREATE TRIGGER make_friendAFTER INSERT ON friendsFOR EACH ROWINSERT INTO friendsVALUES (NEW.user2, NEW.user1);

In the Tigerface database, this trigger in intended to insert thesame pair in reverse order.It does not work.

Why not?

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 16 / 22

Page 18: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Update Triggers

Insert a FriendCREATE TRIGGER make_friendAFTER INSERT ON friendsFOR EACH ROWINSERT INTO friendsVALUES (NEW.user2, NEW.user1);

In the Tigerface database, this trigger in intended to insert thesame pair in reverse order.It does not work. Why not?

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 16 / 22

Page 19: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Update Triggers

Insert a UserCREATE TRIGGER update_statsAFTER INSERT ON usersFOR EACH ROWUPDATE user_statsSET user_count = user_count + 1;

Suppose we have another table user_stats in which we record,among other things, the number of users.Write a similar trigger for deletions from users.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 17 / 22

Page 20: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Outline

1 Triggers

2 Cascading Triggers

3 Update and Insert Triggers

4 Displaying and Dropping Triggers

5 Examples

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 18 / 22

Page 21: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

DisplayingTriggers

Displaying TriggersSHOW TRIGGERS;

We may display all triggers.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 19 / 22

Page 22: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Displaying and Dropping Triggers

Dropping TriggersDROP TRIGGER trigger_name;

Triggers are given names so that they can be dropped.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 20 / 22

Page 23: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Outline

1 Triggers

2 Cascading Triggers

3 Update and Insert Triggers

4 Displaying and Dropping Triggers

5 Examples

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 21 / 22

Page 24: Lecture 14 Robb T. Koetherpeople.hsc.edu/faculty-staff/robbk/Coms480/Lectures/Spring 2018/L… · Triggers Lecture 14 Robb T. Koether Hampden-Sydney College Wed, Feb 14, 2018 Robb

Examples

Using the company database, create triggers forDeleting a project.Updating a department number.

Robb T. Koether (Hampden-Sydney College) Triggers Wed, Feb 14, 2018 22 / 22