4 trigger

15
[email protected] Hệ quản trị cơ sở dữ liệu Hệ quản trị cơ sở dữ liệu Dư Phương Hạnh Bộ môn Hệ thống thông tin Khoa CNTT, trường Đại học Công nghệ Đại học Quốc gia Hanoi Trigger Trigger

Upload: tran-thanh

Post on 25-May-2015

271 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: 4  trigger

[email protected]

Hệ quản trị cơ sở dữ liệuHệ quản trị cơ sở dữ liệu

Dư Phương HạnhBộ môn Hệ thống thông tin

Khoa CNTT, trường Đại học Công

nghệ

Đại học Quốc gia Hanoi

TriggerTrigger

Page 2: 4  trigger

Hệ quản trị CSDL @ BM HTTT2

Outline

Introduction Create trigger Managing trigger Exercises

Tài liệu tham khảo: http://www.mysqltutorial.org/mysql-triggers.aspx

Page 3: 4  trigger

Hệ quản trị CSDL @ BM HTTT3

Introduction

Trigger is a set of SQL statements which is stored to be activated or fired when an event associating with a database table occurs. The event can be any event including INSERT, UPDATE  and DELETE.

Sometimes a trigger is referred as a special kind of stored procedure in term of procedural code inside its body. The difference between a trigger and a stored procedure is that a trigger is activated or called when an event happens in a database table, a stored procedure must be called explicitly.

Page 4: 4  trigger

Hệ quản trị CSDL @ BM HTTT4

Advantages

Trigger provides an alternative way to check integrity.

Trigger can catch the errors in business logic in the database level.

Trigger provides an alternative way to run scheduled tasks. With SQL trigger, you don’t have to wait to run the scheduled tasks. You can handle those tasks before or after changes being made to database tables.

SQL trigger is very useful when you use it to audit the changes of data in a database table.

Page 5: 4  trigger

Hệ quản trị CSDL @ BM HTTT5

Disadvantages

Trigger only can provide extended validation and cannot replace all the validations. Some simple validations can be done in the application level.  – For example, you can validate input check in

the client side by using javascript or in the server side by server script using PHP or ASP.NET…

Page 6: 4  trigger

Hệ quản trị CSDL @ BM HTTT6

Disadvantages

Triggers executes invisibly from client-application which connects to the database server so it is difficult to figure out what happen underlying database layer.

SQL Triggers run every updates made to the table therefore it adds workload to the database and cause system runs slower.

Page 7: 4  trigger

Hệ quản trị CSDL @ BM HTTT7

Create trigger

CREATE TRIGGER trig_name trig_time trig_event

ON table_name

FOR EACH ROW

BEGIN

...

ENDTrig_time: BEFORE, AFTERTrig_even:  INSERT, UPDATE and DELETE

– A trigger only can fire with one event. To define trigger which are fired by multiple events, you have to define multiple triggers, one for each event.

Page 8: 4  trigger

Hệ quản trị CSDL @ BM HTTT8

Create trigger MySQL gives you OLD and NEW keyword to help you write

trigger more efficient. – The OLD keyword refers to the existing row before you update data – The NEW keyword refers to the new row after you update data.

When you create a trigger in MySQL, its definition stores in the file with extension .TRG in a database folder with specific name as follows:/data_folder/database_name/table_name.trg

Page 9: 4  trigger

Hệ quản trị CSDL @ BM HTTT9

Examples

Consider that we want to keep the changes of employee's data in another table whenever data of an employee's record changed.

In order to do so you create a new table called employees_audit  to keep track the changes as follows:

Page 10: 4  trigger

Hệ quản trị CSDL @ BM HTTT10

Examples

CREATE TABLE employees_audit

(

id int(11) NOT NULL AUTO_INCREMENT,

employeeNumber int(11) NOT NULL,

lastname varchar(50) NOT NULL,

changedon datetime DEFAULT NULL,

action varchar(50) DEFAULT NULL,

PRIMARY KEY (id)

)

Page 11: 4  trigger

Hệ quản trị CSDL @ BM HTTT11

Examples

DELIMITER $$

CREATE TRIGGER before_employee_update

BEFORE UPDATE ON employees

FOR EACH ROW

BEGIN

INSERT INTO employees_audit

SET action = 'update',

employeeNumber = OLD.employeeNumber,

lastname = OLD.lastname,

changedon = NOW();

END$$

DELIMITER ;

Page 12: 4  trigger

Hệ quản trị CSDL @ BM HTTT12

Managing trigger Trigger is stored as plain text file in the database folder as

follows: /data_folder/database_name/table_name.trg, with any plain text editor such as notepad you can view it.

MySQL provides you another way to view the trigger by executing SQL statement:

SELECT * FROM Information_Schema.Trigger

WHERE Trigger_schema = 'database_name' AND

Trigger_name = 'trigger_name';

Page 13: 4  trigger

Hệ quản trị CSDL @ BM HTTT13

Managing trigger

If you want to retrieve all triggers associated with a database just executing the following SQL statement: SELECT * FROM Information_Schema.Trigger

WHERE Trigger_schema = 'database_name';

To find all triggers associating with a database table, just executing the following SQL statement: SELECT * FROM Information_Schema.Trigger

WHERE Trigger_schema = 'database_name' AND

Event_object_table = 'table_name';

Page 14: 4  trigger

Hệ quản trị CSDL @ BM HTTT14

Managing trigger

In MySQL you are not only able to view the trigger but also remove an existing trigger. To remove a trigger you can use the SQL statement DROP TRIGGER as follows:

DROP TRIGGER table_name.trigger_name

To modify a trigger, you have to delete it first and recreate it. MySQL doesn't provide you SQL statement to alter an existing trigger like altering other database objects such as tables or stored procedures.

Page 15: 4  trigger

Hệ quản trị CSDL @ BM HTTT15

Exercises

1. Viết một trigger thực hiện công việc sau: Với những đơn hàng trị giá >1.000.000 thì chiết khấu 5%.

2. Viết trigger đảm bảo rằng: nếu số lượng hàng hoá khách hàng đặt mua lớn hơn số lượng hàng còn trong kho thì đưa ra thông báo ‘không đủ lượng hàng theo yêu cầu’, sau đó huỷ bỏ dòng đặt hàng đối với mặt hàng này.