New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
4 trigger
1. Hệ quản trị cơ sở dữ liệu
Trigger
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
hanhdp@vnu.edu.vn
3. 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.
3
Hệ quản trị CSDL @ BM HTTT
4. 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.
4
Hệ quản trị CSDL @ BM HTTT
5. 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…
5
Hệ quản trị CSDL @ BM HTTT
6. 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.
6
Hệ quản trị CSDL @ BM HTTT
7. Create trigger
CREATE TRIGGER trig_name trig_time trig_event
ON table_name
FOR EACH ROW
BEGIN
...
END
Trig_time: BEFORE, AFTER
Trig_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.
7
Hệ quản trị CSDL @ BM HTTT
8. 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
8
Hệ quản trị CSDL @ BM HTTT
9. 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:
9
Hệ quản trị CSDL @ BM HTTT
10. 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)
)
10
Hệ quản trị CSDL @ BM HTTT
11. 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 ;
11
Hệ quản trị CSDL @ BM HTTT
12. 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';
12
Hệ quản trị CSDL @ BM HTTT
13. 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';
13
Hệ quản trị CSDL @ BM HTTT
14. 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.
14
Hệ quản trị CSDL @ BM HTTT
15. 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.
15
Hệ quản trị CSDL @ BM HTTT